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