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