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 """ 32 Fixed-Point parameter type testcases - FP32_Q15.16 33 34 List of tested functions : 35 -------------------------- 36 - [setParameter] function 37 - [getParameter] function 38 39 Initial Settings : 40 ------------------ 41 FP32_Q15.16 : 42 - size = 32 bits 43 - 15 integer bits, 16 fractionnal bits 44 - range : [-32768, 32767.9999847412109375] 45 46 Test cases : 47 ------------ 48 - FP32_Q15.16 parameter min value = -32768 49 - FP32_Q15.16 parameter min value out of bounds = -32768.00001 50 - FP32_Q15.16 parameter max value = 32767.99998 51 - FP32_Q15.16 parameter max value out of bounds = 32767.999985 52 - FP32_Q15.16 parameter in nominal case = 12345.12345 53 """ 54 import os 55 import commands 56 from Util.PfwUnitTestLib import PfwTestCase 57 from Util import ACTLogging 58 log=ACTLogging.Logger() 59 60 # Test of type FP32_Q15.16 - range [-32768,32767.9999847412109375] 61 class TestCases(PfwTestCase): 62 def setUp(self): 63 self.param_name = "/Test/Test/TEST_DIR/FP32_Q15.16" 64 self.pfw.sendCmd("setTuningMode", "on") 65 66 def tearDown(self): 67 self.pfw.sendCmd("setTuningMode", "off") 68 69 def test_Nominal_Case(self): 70 """ 71 Testing FP32_Q15.16 in nominal case = 12345.12345 72 ------------------------------------------------- 73 Test case description : 74 ~~~~~~~~~~~~~~~~~~~~~~~ 75 - set FP32_Q15.16 parameter in nominal case = 12345.12345 76 Tested commands : 77 ~~~~~~~~~~~~~~~~~ 78 - [setParameter] function 79 Used commands : 80 ~~~~~~~~~~~~~~~ 81 - [getParameter] function 82 Expected result : 83 ~~~~~~~~~~~~~~~~~ 84 - FP32_Q15.16 parameter set to 12345.12345 85 - Blackboard and filesystem values checked 86 """ 87 log.D(self.test_Nominal_Case.__doc__) 88 log.I("FP32_Q15.16 parameter in nominal case = 12345.12345") 89 value = "12345.1234" 90 hex_value = "0x30391f97" 91 #Set parameter value 92 out, err = self.pfw.sendCmd("setParameter", self.param_name, value) 93 assert err == None, log.E("when setting parameter %s : %s" % (self.param_name, err)) 94 assert out == "Done", log.F("when setting parameter %s : %s" % (self.param_name, err)) 95 #Check parameter value on blackboard 96 out, err = self.pfw.sendCmd("getParameter", self.param_name, "") 97 assert err == None, log.E("when setting parameter %s : %s" % (self.param_name, err)) 98 assert round(float(out),4) == float(value), log.F("BLACKBOARD : Incorrect value for %s, expected: %s, found: %s" 99 % (self.param_name, value, out)) 100 #Check parameter value on filesystem 101 assert open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] == hex_value, log.F("FILESYSTEM : parameter update error") 102 log.I("test OK") 103 104 105 def test_TypeMin(self): 106 """ 107 Testing FP32_Q15.16 minimal value = -32768 108 ------------------------------------------ 109 Test case description : 110 ~~~~~~~~~~~~~~~~~~~~~~~ 111 - set FP32_Q15.16 parameter min value = -32768 112 Tested commands : 113 ~~~~~~~~~~~~~~~~~ 114 - [setParameter] function 115 Used commands : 116 ~~~~~~~~~~~~~~~ 117 - [getParameter] function 118 Expected result : 119 ~~~~~~~~~~~~~~~~~ 120 - FP32_Q15.16 parameter set to -32768 121 - Blackboard and filesystem values checked 122 """ 123 log.D(self.test_TypeMin.__doc__) 124 log.I("FP32_Q15.16 parameter min value = -32768") 125 value = "-32768" 126 hex_value = "0x80000000" 127 #Set parameter value 128 out, err = self.pfw.sendCmd("setParameter", self.param_name, value) 129 assert err == None, log.E("when setting parameter %s : %s" % (self.param_name, err)) 130 assert out == "Done", log.F("when setting parameter %s : %s" % (self.param_name, out)) 131 #Check parameter value on blackboard 132 out, err = self.pfw.sendCmd("getParameter", self.param_name, "") 133 assert err == None,log.E("when setting parameter %s : %s" % (self.param_name, err)) 134 assert round(float(out),5) == float(value), log.F("BLACKBOARD : Incorrect value for %s, expected: %s, found: %s" 135 % (self.param_name, value, out)) 136 #Check parameter value on filesystem 137 assert open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] == hex_value, log.F("FILESYSTEM : parameter update error") 138 log.I("test OK") 139 140 def test_TypeMin_Overflow(self): 141 """ 142 Testing FP32_Q15.16 parameter value out of negative range 143 --------------------------------------------------------- 144 Test case description : 145 ~~~~~~~~~~~~~~~~~~~~~~~ 146 - set FP32_Q15.16 to -32768.00001 147 Tested commands : 148 ~~~~~~~~~~~~~~~~~ 149 - [setParameter] function 150 Used commands : 151 ~~~~~~~~~~~~~~~ 152 - [getParameter] function 153 Expected result : 154 ~~~~~~~~~~~~~~~~~ 155 - error detected 156 - FP32_Q15.16 parameter not updated 157 - Blackboard and filesystem values checked 158 """ 159 log.D(self.test_TypeMin_Overflow.__doc__) 160 log.I("FP32_Q15.16 parameter min value out of bounds = -32768.000001") 161 value = "-32768.00001" 162 param_check = open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] 163 #Set parameter value 164 out, err = self.pfw.sendCmd("setParameter", self.param_name, value, expectSuccess=False) 165 assert err == None, log.E("when setting parameter %s : %s" 166 % (self.param_name, err)) 167 assert out != "Done", log.F("PFW : Error not detected when setting parameter %s out of bounds" 168 % (self.param_name)) 169 #Check parameter value on filesystem 170 assert open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] == param_check, log.F("FILESYSTEM : Forbiden parameter change") 171 log.I("test OK") 172 173 def test_TypeMax(self): 174 """ 175 Testing FP32_Q15.16 parameter maximum value 176 ------------------------------------------- 177 Test case description : 178 ~~~~~~~~~~~~~~~~~~~~~~~ 179 - set FP32_Q15.16 to 32767.99998 180 Tested commands : 181 ~~~~~~~~~~~~~~~~~ 182 - [setParameter] function 183 Used commands : 184 ~~~~~~~~~~~~~~~ 185 - [getParameter] function 186 Expected result : 187 ~~~~~~~~~~~~~~~~~ 188 - FP32_Q15.16 parameter set to 32767.99998 189 - Blackboard and filesystem values checked 190 """ 191 log.D(self.test_TypeMax.__doc__) 192 log.I("FP32_Q15.16 parameter max value = 32767.99998") 193 value = "32767.99998" 194 hex_value = "0x7fffffff" 195 #Set parameter value 196 out, err = self.pfw.sendCmd("setParameter", self.param_name, value) 197 assert err == None, log.E("when setting parameter %s : %s" % (self.param_name, err)) 198 assert out == "Done", log.F("when setting parameter %s : %s" % (self.param_name, out)) 199 #Check parameter value on blackboard 200 out, err = self.pfw.sendCmd("getParameter", self.param_name, "") 201 assert err == None, log.E("when setting parameter %s : %s" % (self.param_name, err)) 202 assert round(float(out),5) == float(value), log.F("BLACKBOARD : Incorrect value for %s, expected: %s, found: %s" 203 % (self.param_name, value, out)) 204 #Check parameter value on filesystem 205 assert open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] == hex_value, log.F("FILESYSTEM : parameter update error") 206 log.I("test OK") 207 208 def test_TypeMax_Overflow(self): 209 """ 210 Testing FP32_Q15.16 parameter value out of positive range 211 --------------------------------------------------------- 212 Test case description : 213 ~~~~~~~~~~~~~~~~~~~~~~~ 214 - set FP32_Q15.16 to 32767.999985 215 Tested commands : 216 ~~~~~~~~~~~~~~~~~ 217 - [setParameter] function 218 Used commands : 219 ~~~~~~~~~~~~~~~ 220 - [getParameter] function 221 Expected result : 222 ~~~~~~~~~~~~~~~~~ 223 - error detected 224 - FP32_Q15.16 parameter not updated 225 - Blackboard and filesystem values checked 226 """ 227 log.D(self.test_TypeMax_Overflow.__doc__) 228 log.I("FP32_Q15.16 parameter max value out of bounds = 32767.999985") 229 value = "32767.999985" 230 param_check = open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] 231 #Set parameter value 232 out, err = self.pfw.sendCmd("setParameter", self.param_name, value, expectSuccess=False) 233 assert err == None, log.E("when setting parameter %s : %s" 234 % (self.param_name, err)) 235 assert out != "Done", log.F("PFW : Error not detected when setting parameter %s out of bounds" 236 % (self.param_name)) 237 #Check parameter value on filesystem 238 assert open(os.environ["PFW_RESULT"] + "/FP32_Q15.16").read()[:-1] == param_check, log.F("FILESYSTEM : Forbiden parameter change") 239 log.I("test OK") 240