1# -*-coding:utf-8 -*
2
3# Copyright (c) 2011-2015, Intel Corporation
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without modification,
7# are permitted provided that the following conditions are met:
8#
9# 1. Redistributions of source code must retain the above copyright notice, this
10# list of conditions and the following disclaimer.
11#
12# 2. Redistributions in binary form must reproduce the above copyright notice,
13# this list of conditions and the following disclaimer in the documentation and/or
14# other materials provided with the distribution.
15#
16# 3. Neither the name of the copyright holder nor the names of its contributors
17# may be used to endorse or promote products derived from this software without
18# specific prior written permission.
19#
20# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
24# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
27# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31"""
32Fixed-Point parameter type testcases - FP8_Q0.7
33
34List of tested functions :
35--------------------------
36    - [setParameter]  function
37    - [getParameter] function
38
39Initial Settings :
40------------------
41    FP8_Q0.7 :
42        - size = 8 bits
43        - 0 integer bits, 7 fractionnal bits
44        - range : [-1, 0.992188]
45
46Test cases :
47------------
48    - FP8_Q0.7 parameter min value = -1
49    - FP8_Q0.7 parameter min value out of bounds = -1.000001
50    - FP8_Q0.7 parameter max value = 0.992188
51    - FP8_Q0.7 parameter max value out of bounds = 0.992189
52    - FP8_Q0.7 parameter in nominal case = 0.50
53"""
54import commands
55import unittest
56from Util.PfwUnitTestLib import PfwTestCase
57from Util import ACTLogging
58log=ACTLogging.Logger()
59
60# Test of type FP8_Q0.7 - range [-1, 0.992188]
61class TestCases(PfwTestCase):
62    def setUp(self):
63        self.param_name = "/Test/Test/TEST_DIR/FP8_Q0.7"
64        self.pfw.sendCmd("setTuningMode", "on")
65        self.type_name = "FP8_Q0.7"
66
67    def tearDown(self):
68        self.pfw.sendCmd("setTuningMode", "off")
69
70    def test_Nominal_Case(self):
71        """
72        Testing FP8_Q0.7 in nominal case = 0.50
73        ---------------------------------------
74            Test case description :
75            ~~~~~~~~~~~~~~~~~~~~~~~
76                - set FP8_Q0.7 parameter in nominal case = 0.50
77            Tested commands :
78            ~~~~~~~~~~~~~~~~~
79                - [setParameter] function
80            Used commands :
81            ~~~~~~~~~~~~~~~
82                - [getParameter] function
83            Expected result :
84            ~~~~~~~~~~~~~~~~~
85                - FP8_Q0.7 parameter set to 0.50
86                - Blackboard and filesystem values checked
87        """
88        log.D(self.test_Nominal_Case.__doc__)
89        value = "0.50"
90        hex_value = "0x40"
91        log.I("Setting %s to value %s" % (self.type_name, value))
92        #Set parameter value
93        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
94        assert err == None, log.E("when setting parameter %s : %s"
95                                  % (self.param_name, err))
96        assert out == "Done", log.F("when setting parameter %s : %s"
97                                  % (self.param_name, out))
98        #Check parameter value on blackboard
99        out, err = self.pfw.sendCmd("getParameter", self.param_name, "")
100        assert err == None, log.E("when setting parameter %s : %s"
101                                  % (self.param_name, err))
102        assert round(float(out), 2) == float(value), log.F("BLACKBOARD - Incorrect value for %s, expected: %s, found: %s"
103                                                        % (self.param_name, value, out))
104        #Check parameter value on filesystem
105        assert commands.getoutput('cat $PFW_RESULT/FP8_Q0.7') == hex_value, log.F("FILESYSTEM - parameter update error")
106        log.I("test OK")
107
108    def test_TypeMin(self):
109        """
110        Testing FP8_Q0.7 minimal value = -1
111        -----------------------------------
112            Test case description :
113            ~~~~~~~~~~~~~~~~~~~~~~~
114                - set FP8_Q0.7 parameter min value = -1
115            Tested commands :
116            ~~~~~~~~~~~~~~~~~
117                - [setParameter] function
118            Used commands :
119            ~~~~~~~~~~~~~~~
120                - [getParameter] function
121            Expected result :
122            ~~~~~~~~~~~~~~~~~
123                - FP8_Q0.7 parameter set to -1
124                - Blackboard and filesystem values checked
125        """
126        log.D(self.test_TypeMin.__doc__)
127        value = "-1"
128        hex_value = "0x80"
129        log.I("Setting %s to value %s" % (self.type_name, value))
130        #Set parameter value
131        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
132        assert err == None, log.E("when setting parameter %s : %s"
133                                  % (self.param_name, err))
134        assert out == "Done", log.F("when setting parameter %s : %s"
135                                  % (self.param_name, out))
136        #Check parameter value on blackboard
137        out, err = self.pfw.sendCmd("getParameter", self.param_name, "")
138        assert err == None, log.E("when setting parameter %s : %s"
139                                  % (self.param_name, err))
140        assert round(float(out), 6) == float(value), log.F("BLACKBOARD - Incorrect value for %s, expected: %s, found: %s"
141                                                           % (self.param_name, value, out))
142        #Check parameter value on filesystem
143        assert commands.getoutput('cat $PFW_RESULT/FP8_Q0.7') == hex_value, log.F("FILESYSTEM - parameter update error")
144        log.I("test OK")
145
146    def test_TypeMin_Overflow(self):
147        """
148        Testing FP8_Q0.7 parameter value out of negative range
149        ------------------------------------------------------
150            Test case description :
151            ~~~~~~~~~~~~~~~~~~~~~~~
152                - set FP8_Q0.7 to -1.00001
153            Tested commands :
154            ~~~~~~~~~~~~~~~~~
155                - [setParameter] function
156            Used commands :
157            ~~~~~~~~~~~~~~~
158                - [getParameter] function
159            Expected result :
160            ~~~~~~~~~~~~~~~~~
161                - error detected
162                - FP8_Q0.7 parameter not updated
163                - Blackboard and filesystem values checked
164        """
165        log.D(self.test_TypeMin_Overflow.__doc__)
166        value = "-1.000001"
167        param_check = commands.getoutput('cat $PFW_RESULT/FP8_Q0.7')
168        log.I("Setting %s to value %s" % (self.type_name, value))
169        #Set parameter value
170        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
171        assert err == None, log.E("when setting parameter %s : %s"
172                                  % (self.param_name, err))
173        assert out != "Done", log.F("Error not detected when setting parameter %s out of bounds"
174                                    % (self.param_name))
175        #Check parameter value on filesystem
176        assert commands.getoutput('cat $PFW_RESULT/FP8_Q0.7') == param_check, log.F("FILESYSTEM - Forbiden parameter change")
177        log.I("test OK")
178
179    @unittest.expectedFailure
180    def test_TypeMax(self):
181        """
182        Testing FP8_Q0.7 parameter maximum value
183        ----------------------------------------
184            Test case description :
185            ~~~~~~~~~~~~~~~~~~~~~~~
186                - set FP8_Q0.7 to 0.992188
187            Tested commands :
188            ~~~~~~~~~~~~~~~~~
189                - [setParameter] function
190            Used commands :
191            ~~~~~~~~~~~~~~~
192                - [getParameter] function
193            Expected result :
194            ~~~~~~~~~~~~~~~~~
195                - FP8_Q0.7 parameter set to 0.992188
196                - Blackboard and filesystem values checked
197        """
198        log.D(self.test_TypeMax.__doc__)
199        value = "0.992188"
200        hex_value = "0x7f"
201        log.I("Setting %s to value %s" % (self.type_name, value))
202        #Set parameter value
203        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
204        assert err == None, log.E("when setting parameter %s : %s"
205                                  % (self.param_name, err))
206        assert out == "Done", log.F("when setting parameter %s : %s"
207                                  % (self.param_name, out))
208        #Check parameter value on blackboard
209        out, err = self.pfw.sendCmd("getParameter", self.param_name, "")
210        assert err == None, log.E("when setting parameter %s : %s"
211                                  % (self.param_name, err))
212        assert round(float(out), 6) == float(value), "ERROR : BLACKBOARD - Incorrect value for %s, expected: %s, found: %s" % (self.param_name, value, out)
213        #Check parameter value on filesystem
214        assert commands.getoutput('cat $PFW_RESULT/FP8_Q0.7') == hex_value, "ERROR : FILESYSTEM - parameter update error"
215        log.I("test OK")
216
217    def test_TypeMax_Overflow(self):
218        """
219        Testing FP8_Q0.7 parameter value out of positive range
220        ------------------------------------------------------
221            Test case description :
222            ~~~~~~~~~~~~~~~~~~~~~~~
223                - set FP8_Q0.7 to 0.992189
224            Tested commands :
225            ~~~~~~~~~~~~~~~~~
226                - [setParameter] function
227            Used commands :
228            ~~~~~~~~~~~~~~~
229                - [getParameter] function
230            Expected result :
231            ~~~~~~~~~~~~~~~~~
232                - error detected
233                - FP8_Q0.7 parameter not updated
234                - Blackboard and filesystem values checked
235        """
236        log.D(self.test_TypeMax_Overflow.__doc__)
237        value = "0.992189"
238        param_check = commands.getoutput('cat $PFW_RESULT/FP8_Q0.7')
239        log.I("Setting %s to value %s" % (self.type_name, value))
240        #Set parameter value
241        out, err = self.pfw.sendCmd("setParameter", self.param_name, value)
242        assert err == None, log.E("when setting parameter %s : %s"
243                                  % (self.param_name, err))
244        assert out != "Done", log.F("Error not detected when setting parameter %s out of bounds"
245                                    % (self.param_name))
246        #Check parameter value on filesystem
247        assert commands.getoutput('cat $PFW_RESULT/FP8_Q0.7') == param_check, log.F("FILESYSTEM - Forbiden parameter change")
248        log.I("test OK")
249