11from  io  import  BytesIO 
22from  unittest  import  TestCase 
33
4+ from  numpy  import  ndarray , int16 , array , int32 , int64 , single , double , uint8 , int8 , uint16 , bool8 
5+ 
46from  trsfile .traceparameter  import  BooleanArrayParameter , ByteArrayParameter , DoubleArrayParameter , FloatArrayParameter , \
57    IntegerArrayParameter , ShortArrayParameter , LongArrayParameter , StringParameter 
68
79
810class  TestParameter (TestCase ):
911    def  test_bool_parameter (self ):
1012        serialized_param  =  b'\x01 \x00 \x01 ' 
11-         param  =  BooleanArrayParameter ([True , False , True ])
12-         self .assertEqual (serialized_param , param .serialize ())
13-         self .assertEqual (BooleanArrayParameter .deserialize (BytesIO (serialized_param ), 3 ), param )
13+         param1  =  BooleanArrayParameter ([True , False , True ])
14+         self .assertEqual (serialized_param , param1 .serialize ())
15+         self .assertEqual (BooleanArrayParameter .deserialize (BytesIO (serialized_param ), 3 ), param1 )
16+         param2  =  BooleanArrayParameter (ndarray (shape = [3 ], dtype = bool8 ,
17+                                                buffer = array ([bool8 (val ) for  val  in  [True , False , True ]])))
18+         self .assertEqual (param1 , param2 )
1419
1520        with  self .assertRaises (TypeError ):
1621            BooleanArrayParameter (True )
@@ -27,6 +32,11 @@ def test_byte_parameter(self):
2732        self .assertEqual (serialized_param , param1 .serialize ())
2833        self .assertEqual (ByteArrayParameter .deserialize (BytesIO (serialized_param ), 16 ), param1 )
2934
35+         with  self .assertWarns (UserWarning ):
36+             param2  =  ByteArrayParameter (ndarray (shape = [2 , 2 , 4 ], dtype = uint8 ,
37+                                                 buffer = array ([uint8 (val ) for  val  in  int_data ])))
38+         self .assertEqual (param1 , param2 )
39+ 
3040        param2  =  ByteArrayParameter (bytearray (int_data ))
3141        self .assertEqual (param1 , param2 )
3242
@@ -37,8 +47,14 @@ def test_byte_parameter(self):
3747            ByteArrayParameter ([0 , '1' ])
3848        with  self .assertRaises (TypeError ):
3949            ByteArrayParameter ([bytes ([0 , 1 , 2 , 3 ]), bytes ([4 , 5 , 6 , 7 ])])
50+         with  self .assertRaises (TypeError ):
51+             ByteArrayParameter (ndarray (shape = [16 ], dtype = int8 , buffer = array ([int8 (val ) for  val  in  int_data ])))
52+         with  self .assertRaises (TypeError ):
53+             ByteArrayParameter (ndarray (shape = [16 ], dtype = uint16 , buffer = array ([uint16 (val ) for  val  in  int_data ])))
4054        with  self .assertRaises (ValueError ):
4155            ByteArrayParameter ([])
56+         with  self .assertRaises (ValueError ):
57+             ByteArrayParameter (ndarray (shape = [0 ], dtype = uint8 , buffer = array ([])))
4258        with  self .assertRaises (TypeError ):
4359            ByteArrayParameter ([0 , 1 , 2 , - 1 ])
4460        with  self .assertRaises (TypeError ):
@@ -47,13 +63,26 @@ def test_byte_parameter(self):
4763    def  test_double_parameter (self ):
4864        serialized_param  =  b'\x00 \x00 \x00 \x00 \x00 \x00 \xe0 \xbf \x00 \x00 \x00 \x00 \x00 \x00 \xe0 \x3f '  \
4965                           b'\x00 \x00 \x00 \x00 \x80 \x84 \x2e \x41 ' 
50-         param  =  DoubleArrayParameter ([- 0.5 , 0.5 , 1e6 ])
51-         self .assertEqual (serialized_param , param .serialize ())
52-         self .assertEqual (DoubleArrayParameter .deserialize (BytesIO (serialized_param ), 3 ), param )
66+         param1  =  DoubleArrayParameter ([- 0.5 , 0.5 , 1e6 ])
67+         self .assertEqual (serialized_param , param1 .serialize ())
68+         self .assertEqual (DoubleArrayParameter .deserialize (BytesIO (serialized_param ), 3 ), param1 )
69+ 
70+         param2  =  DoubleArrayParameter (ndarray (shape = [3 ], dtype = double , buffer = array ([- 0.5 , 0.5 , 1e6 ])))
71+         self .assertEqual (param1 , param2 )
5372
5473        # an array of only integers is still a valid value of a DoubleArrayParameter 
55-         param1  =  DoubleArrayParameter ([1 , 2 , 1000000 ])
56-         param2  =  DoubleArrayParameter ([1 , 2.0 , 1e6 ])
74+         param1  =  DoubleArrayParameter ([- 1 , 2 , 1000000 ])
75+         param2  =  DoubleArrayParameter ([- 1 , 2.0 , 1e6 ])
76+         self .assertEqual (param1 , param2 )
77+         with  self .assertWarns (UserWarning ):
78+             param1  =  DoubleArrayParameter (ndarray (shape = [1 , 3 ], dtype = int32 ,
79+                                                   buffer = array ([int32 (val ) for  val  in  [- 1 , 2 , 1000000 ]])))
80+         self .assertEqual (param1 , param2 )
81+ 
82+         with  self .assertWarns (UserWarning ):
83+             param1  =  DoubleArrayParameter (ndarray (shape = [1 , 3 ], dtype = int64 ,
84+                                                   buffer = array ([int64 (val ) for  val  in  [- 1 , 2 , 10000000000 ]])))
85+         param2  =  DoubleArrayParameter ([- 1 , 2.0 , 1e10 ])
5786        self .assertEqual (param1 , param2 )
5887
5988        # a float array parameter is not the same as a double array parameter 
@@ -63,42 +92,82 @@ def test_double_parameter(self):
6392
6493        with  self .assertRaises (TypeError ):
6594            DoubleArrayParameter ([0.5 , - 0.5 , 'NaN' ])
95+         with  self .assertRaises (TypeError ):
96+             DoubleArrayParameter (ndarray (shape = [3 ], dtype = single ,
97+                                          buffer = array ([single (val ) for  val  in  [- 0.5 , 0.5 , 1e6 ]])))
6698        with  self .assertRaises (TypeError ):
6799            DoubleArrayParameter (0.5 )
68100        with  self .assertRaises (ValueError ):
69101            DoubleArrayParameter ([])
102+         with  self .assertRaises (ValueError ):
103+             IntegerArrayParameter (ndarray (shape = [0 ], dtype = double , buffer = array ([])))
70104
71105    def  test_float_parameter (self ):
72106        serialized_param  =  b'\x00 \x00 \x00 \xbf \x00 \x00 \x00 \x3f \x00 \x24 \x74 \x49 ' 
73-         param  =  FloatArrayParameter ([- 0.5 , 0.5 , 1e6 ])
74-         self .assertEqual (serialized_param , param .serialize ())
75-         self .assertEqual (FloatArrayParameter .deserialize (BytesIO (serialized_param ), 3 ), param )
107+         param1  =  FloatArrayParameter ([- 0.5 , 0.5 , 1e6 ])
108+         self .assertEqual (serialized_param , param1 .serialize ())
109+         self .assertEqual (FloatArrayParameter .deserialize (BytesIO (serialized_param ), 3 ), param1 )
110+ 
111+         param2  =  FloatArrayParameter (ndarray (shape = [3 ], dtype = single ,
112+                                              buffer = array ([single (val ) for  val  in  [- 0.5 , 0.5 , 1e6 ]])))
113+         self .assertEqual (param1 , param2 )
76114
77115        # an array of only integers is still a valid value of a FloatArrayParameter 
78-         param1  =  FloatArrayParameter ([1 , 2 , 1000000 ])
79-         param2  =  FloatArrayParameter ([1 , 2.0 , 1e6 ])
116+         param1  =  FloatArrayParameter ([- 1 , 2 , 1000000 ])
117+         param2  =  FloatArrayParameter ([- 1 , 2.0 , 1e6 ])
118+         self .assertEqual (param1 , param2 )
119+ 
120+         with  self .assertWarns (UserWarning ):
121+             param1  =  FloatArrayParameter (ndarray (shape = [1 , 3 ], dtype = int32 ,
122+                                                  buffer = array ([int32 (val ) for  val  in  [- 1 , 2 , 1000000 ]])))
123+         self .assertEqual (param1 , param2 )
124+ 
125+         with  self .assertWarns (UserWarning ):
126+             param1  =  FloatArrayParameter (ndarray (shape = [1 , 3 ], dtype = int64 ,
127+                                                  buffer = array ([int64 (val ) for  val  in  [- 1 , 2 , 10000000000 ]])))
128+         param2  =  FloatArrayParameter ([- 1 , 2.0 , 1e10 ])
80129        self .assertEqual (param1 , param2 )
81130
82131        with  self .assertRaises (TypeError ):
83132            FloatArrayParameter ([0.5 , - 0.5 , 'NaN' ])
133+         with  self .assertRaises (TypeError ):
134+             FloatArrayParameter (ndarray (shape = [3 ], dtype = double ,
135+                                         buffer = array ([double (val ) for  val  in  [- 0.5 , 0.5 , 1e6 ]])))
84136        with  self .assertRaises (TypeError ):
85137            FloatArrayParameter (0.5 )
86138        with  self .assertRaises (ValueError ):
87139            FloatArrayParameter ([])
140+         with  self .assertRaises (ValueError ):
141+             IntegerArrayParameter (ndarray (shape = [0 ], dtype = single , buffer = array ([])))
88142
89143    def  test_integer_parameter (self ):
90144        serialized_param  =  b'\xff \xff \xff \xff \x01 \x00 \x00 \x00 \xff \xff \xff \x7f \x00 \x00 \x00 \x80 ' 
91-         param  =  IntegerArrayParameter ([- 1 , 1 , 0x7fffffff , - 0x80000000 ])
92-         self .assertEqual (serialized_param , param .serialize ())
93-         self .assertEqual (IntegerArrayParameter .deserialize (BytesIO (serialized_param ), 4 ), param )
145+         param1  =  IntegerArrayParameter ([- 1 , 1 , 0x7fffffff , - 0x80000000 ])
146+         self .assertEqual (serialized_param , param1 .serialize ())
147+         self .assertEqual (IntegerArrayParameter .deserialize (BytesIO (serialized_param ), 4 ), param1 )
148+ 
149+         with  self .assertWarns (UserWarning ):
150+             param2  =  IntegerArrayParameter (ndarray (shape = [2 , 2 ], dtype = int32 ,
151+                                                    buffer = array ([int32 (val ) for  val  in  [- 1 , 1 , 0x7fffffff , - 0x80000000 ]])))
152+         self .assertEqual (param1 , param2 )
94153
95154        # a short array parameter is not the same as an int array parameter 
96155        param1  =  ShortArrayParameter ([0 , 1 , - 1 , 255 , 256 , - 32768 , 32767 ])
97156        param2  =  IntegerArrayParameter ([0 , 1 , - 1 , 255 , 256 , - 32768 , 32767 ])
98157        self .assertNotEqual (param1 , param2 )
99158
159+         # verify that an integer array parameter based on a ndarray filled with int16s works 
160+         param1  =  IntegerArrayParameter (ndarray (shape = [7 ], dtype = int16 ,
161+                                                buffer = array ([int16 (val ) for  val  in  [0 , 1 , - 1 , 255 , 256 , - 32768 , 32767 ]])))
162+         self .assertEqual (param1 , param2 )
163+ 
100164        with  self .assertRaises (TypeError ):
101165            IntegerArrayParameter ([1 , 256 , 1.0 ])
166+         with  self .assertRaises (TypeError ):
167+             IntegerArrayParameter (ndarray (shape = [4 ], dtype = int64 ,
168+                                           buffer = array ([int64 (val ) for  val  in  [- 1 , 1 , 0x7fffffffffffffff , - 0x8000000000000000 ]])))
169+         with  self .assertRaises (ValueError ):
170+             IntegerArrayParameter (ndarray (shape = [0 ], dtype = int32 , buffer = array ([])))
102171        with  self .assertRaises (TypeError ):
103172            IntegerArrayParameter (1 )
104173        with  self .assertRaises (ValueError ):
@@ -111,30 +180,52 @@ def test_integer_parameter(self):
111180    def  test_long_parameter (self ):
112181        serialized_param  =  b'\xff \xff \xff \xff \xff \xff \xff \xff \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 '  \
113182                           b'\xff \xff \xff \xff \xff \xff \xff \x7f \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x80 ' 
114-         param  =  LongArrayParameter ([- 1 , 1 , 0x7fffffffffffffff , - 0x8000000000000000 ])
115-         self .assertEqual (serialized_param , param .serialize ())
116-         self .assertEqual (LongArrayParameter .deserialize (BytesIO (serialized_param ), 4 ), param )
183+         param1 =  LongArrayParameter ([- 1 , 1 , 0x7fffffffffffffff , - 0x8000000000000000 ])
184+         self .assertEqual (serialized_param , param1 .serialize ())
185+         self .assertEqual (LongArrayParameter .deserialize (BytesIO (serialized_param ), 4 ), param1 )
186+ 
187+         with  self .assertWarns (UserWarning ):
188+             param2  =  LongArrayParameter (ndarray (shape = [2 , 2 ], dtype = int64 ,
189+                                                 buffer = array ([int64 (val ) for  val  in  [- 1 , 1 , 0x7fffffffffffffff , - 0x8000000000000000 ]])))
190+         self .assertEqual (param1 , param2 )
117191
118192        # an int array parameter is not the same as a long array parameter 
119193        param1  =  IntegerArrayParameter ([- 1 , 1 , 0x7fffffff , - 0x80000000 ])
120194        param2  =  LongArrayParameter ([- 1 , 1 , 0x7fffffff , - 0x80000000 ])
121195        self .assertNotEqual (param1 , param2 )
122196
197+         # verify that a long array parameter based on a ndarray filled with int32s works 
198+         with  self .assertWarns (UserWarning ):
199+             param1  =  LongArrayParameter (ndarray (shape = [1 , 4 ], dtype = int32 ,
200+                                                 buffer = array ([int32 (val ) for  val  in  [- 1 , 1 , 0x7fffffff , - 0x80000000 ]])))
201+         self .assertEqual (param1 , param2 )
202+ 
123203        with  self .assertRaises (TypeError ):
124204            LongArrayParameter ([1 , 256 , 1.0 ])
125205        with  self .assertRaises (TypeError ):
126206            LongArrayParameter (1 )
127207        with  self .assertRaises (ValueError ):
128208            LongArrayParameter ([])
209+         with  self .assertRaises (ValueError ):
210+             LongArrayParameter (ndarray (shape = [0 ], dtype = int64 , buffer = array ([])))
129211
130212    def  test_short_parameter (self ):
131213        serialized_param  =  b'\x00 \x00 \x01 \x00 \xff \xff \xff \x00 \x00 \x01 \x00 \x80 \xff \x7f ' 
132-         param  =  ShortArrayParameter ([0 , 1 , - 1 , 255 , 256 , - 32768 , 32767 ])
133-         self .assertEqual (serialized_param , param .serialize ())
134-         self .assertEqual (ShortArrayParameter .deserialize (BytesIO (serialized_param ), 7 ), param )
214+         param1  =  ShortArrayParameter ([0 , 1 , - 1 , 255 , 256 , - 32768 , 32767 ])
215+         self .assertEqual (serialized_param , param1 .serialize ())
216+         self .assertEqual (ShortArrayParameter .deserialize (BytesIO (serialized_param ), 7 ), param1 )
217+ 
218+         param2  =  ShortArrayParameter (ndarray (shape = [7 ], dtype = int16 ,
219+                                              buffer = array ([int16 (val ) for  val  in  [0 , 1 , - 1 , 255 , 256 , - 32768 , 32767 ]])))
220+         self .assertEqual (param1 , param2 )
135221
136222        with  self .assertRaises (TypeError ):
137223            ShortArrayParameter ([1 , 256 , 1.0 ])
224+         with  self .assertRaises (TypeError ):
225+             ShortArrayParameter (ndarray (shape = [4 ], dtype = int32 ,
226+                                         buffer = array ([int32 (val ) for  val  in  [- 1 , 1 , 0x7fffffff , - 0x80000000 ]])))
227+         with  self .assertRaises (ValueError ):
228+             ShortArrayParameter (ndarray (shape = [0 ], dtype = int16 , buffer = array ([])))
138229        with  self .assertRaises (TypeError ):
139230            ShortArrayParameter (1 )
140231        with  self .assertRaises (ValueError ):
@@ -159,5 +250,3 @@ def test_string_parameter(self):
159250            StringParameter (['The' , 'quick' , 'brown' , 'fox' , 'jumped' , 'over' , 'the' , 'lazy' , 'dog' ])
160251        with  self .assertRaises (ValueError ):
161252            StringParameter (None )
162- 
163- 
0 commit comments