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