diff options
author | Jeremy Johnson <jeremy.johnson@arm.com> | 2023-11-15 15:52:06 +0000 |
---|---|---|
committer | Jeremy Johnson <jeremy.johnson@arm.com> | 2023-11-23 14:09:14 +0000 |
commit | a015001dfbd0ed48caf54fd66b0509ee344a229e (patch) | |
tree | 5f99a7d2d4aba2db2e672efb1168db961f99a544 /verif/generator | |
parent | 0bbd8bcfb20ec834f18d0bb89fc69ba4e92b3019 (diff) | |
download | reference_model-a015001dfbd0ed48caf54fd66b0509ee344a229e.tar.gz |
Main Compliance testing support for COMPARISON ops
Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: Id6229cfaccad866b110630119eb045dbf6453bf5
Diffstat (limited to 'verif/generator')
-rw-r--r-- | verif/generator/tosa_arg_gen.py | 21 | ||||
-rw-r--r-- | verif/generator/tosa_test_gen.py | 42 |
2 files changed, 43 insertions, 20 deletions
diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py index 6675025..9147605 100644 --- a/verif/generator/tosa_arg_gen.py +++ b/verif/generator/tosa_arg_gen.py @@ -1119,14 +1119,18 @@ class TosaTensorValuesGen: return TosaTensorValuesGen.TVGInfo(tens_ser_list, None) @staticmethod - def tvgEqual(testGen, op, dtypeList, shapeList, testArgs, error_name=None): - if error_name is None: + def tvgEqual(testGen, opName, dtypeList, shapeList, argsDict, error_name=None): + if error_name is None and not gtu.dtypeIsSupportedByCompliance(dtypeList[0]): + # Integer + op = testGen.TOSA_OP_LIST[opName] pCount, cCount = op["operands"] assert ( pCount == 2 and cCount == 0 ), "Op.EQUAL must have 2 placeholders, 0 consts" + a_arr = testGen.getRandTensor(shapeList[0], dtypeList[0]) b_arr = testGen.getRandTensor(shapeList[1], dtypeList[1]) + # Using random numbers means that it will be very unlikely that # there are any matching (equal) values, therefore force that # there are twice the number of matching values as the tensor rank @@ -1147,17 +1151,18 @@ class TosaTensorValuesGen: a_arr[tuple(a_index)] = b_arr[tuple(b_index)] - placeholders = [] - placeholders.append( + tens_ser_list = [] + tens_ser_list.append( testGen.ser.addPlaceholder(shapeList[0], dtypeList[0], a_arr) ) - placeholders.append( + tens_ser_list.append( testGen.ser.addPlaceholder(shapeList[1], dtypeList[1], b_arr) ) - return placeholders + return TosaTensorValuesGen.TVGInfo(tens_ser_list, None) else: - return TosaTensorValuesGen.tvgDefault( - testGen, op, dtypeList, shapeList, testArgs, error_name + # ERROR_IF or floating point test + return TosaTensorValuesGen.tvgLazyGenDefault( + testGen, opName, dtypeList, shapeList, argsDict, error_name ) @staticmethod diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py index 04093b8..7b44ced 100644 --- a/verif/generator/tosa_test_gen.py +++ b/verif/generator/tosa_test_gen.py @@ -622,14 +622,19 @@ class TosaTestGen: ) return result_tens - def build_comparison(self, op, a, b, validator_fcns=None, error_name=None): - result_tens = OutputShaper.binaryComparisonOp( + def build_comparison( + self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None + ): + assert len(inputs) == 2 + a, b = inputs + + result_tensor = OutputShaper.binaryComparisonOp( self.ser, self.rng, a, b, error_name ) # Invalidate Input/Output list for error if checks. input_list = [a.name, b.name] - output_list = [result_tens.name] + output_list = [result_tensor.name] pCount, cCount = op["operands"] num_operands = pCount + cCount input_list, output_list = TosaErrorIfArgGen.eiInvalidateInputOutputList( @@ -645,9 +650,9 @@ class TosaTestGen: input2=b, input_shape=a.shape, input_dtype=a.dtype, - output_shape=result_tens.shape, - output_dtype=result_tens.dtype, - result_tensors=[result_tens], + output_shape=result_tensor.shape, + output_dtype=result_tensor.dtype, + result_tensors=[result_tensor], input_list=input_list, output_list=output_list, num_operands=num_operands, @@ -659,7 +664,11 @@ class TosaTestGen: input_list, output_list, ) - return result_tens + + compliance = self.tensorComplianceMetaData( + op, a.dtype, args_dict, result_tensor, error_name + ) + return TosaTestGen.BuildInfo(result_tensor, compliance) def build_argmax( self, op, inputs, args_dict, validator_fcns, error_name, qinfo=None @@ -3863,7 +3872,7 @@ class TosaTestGen: build_comparison, TosaTensorGen.tgBroadcastFuzz, TosaTensorValuesGen.tvgEqual, - None, + TosaArgGen.agNone, ), "types": TYPE_FI32, "error_if_validators": ( @@ -3875,6 +3884,9 @@ class TosaTestGen: TosaErrorValidator.evDimensionMismatch, TosaErrorValidator.evBroadcastShapesMismatch, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, }, "greater_equal": { "op": Op.GREATER_EQUAL, @@ -3882,8 +3894,8 @@ class TosaTestGen: "build_fcn": ( build_comparison, TosaTensorGen.tgBroadcastFuzz, - TosaTensorValuesGen.tvgDefault, - None, + TosaTensorValuesGen.tvgLazyGenDefault, + TosaArgGen.agNone, ), "types": TYPE_FI32, "error_if_validators": ( @@ -3895,6 +3907,9 @@ class TosaTestGen: TosaErrorValidator.evDimensionMismatch, TosaErrorValidator.evBroadcastShapesMismatch, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, }, "greater": { "op": Op.GREATER, @@ -3902,8 +3917,8 @@ class TosaTestGen: "build_fcn": ( build_comparison, TosaTensorGen.tgBroadcastFuzz, - TosaTensorValuesGen.tvgDefault, - None, + TosaTensorValuesGen.tvgLazyGenDefault, + TosaArgGen.agNone, ), "types": TYPE_FI32, "error_if_validators": ( @@ -3915,6 +3930,9 @@ class TosaTestGen: TosaErrorValidator.evDimensionMismatch, TosaErrorValidator.evBroadcastShapesMismatch, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, }, # Reduction operators "reduce_all": { |