Home | History | Annotate | Download | only in Types
      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