@@ -40,7 +40,7 @@ public unsafe void SmokeTest()
4040 Assert . AreEqual ( TfLiteStatus . kTfLiteOk , c_api_lite . TfLiteInterpreterAllocateTensors ( interpreter ) ) ;
4141
4242 var input_tensor = c_api_lite . TfLiteInterpreterGetInputTensor ( interpreter , 0 ) ;
43- Assert . AreEqual ( TF_DataType . TF_FLOAT , c_api_lite . TfLiteTensorType ( input_tensor ) ) ;
43+ Assert . AreEqual ( TfLiteDataType . kTfLiteFloat32 , c_api_lite . TfLiteTensorType ( input_tensor ) ) ;
4444 Assert . AreEqual ( 1 , c_api_lite . TfLiteTensorNumDims ( input_tensor ) ) ;
4545 Assert . AreEqual ( 2 , c_api_lite . TfLiteTensorDim ( input_tensor , 0 ) ) ;
4646 Assert . AreEqual ( sizeof ( float ) * 2 , c_api_lite . TfLiteTensorByteSize ( input_tensor ) ) ;
@@ -61,7 +61,7 @@ public unsafe void SmokeTest()
6161 Assert . AreEqual ( TfLiteStatus . kTfLiteOk , c_api_lite . TfLiteInterpreterInvoke ( interpreter ) ) ;
6262
6363 var output_tensor = c_api_lite . TfLiteInterpreterGetOutputTensor ( interpreter , 0 ) ;
64- Assert . AreEqual ( TF_DataType . TF_FLOAT , c_api_lite . TfLiteTensorType ( output_tensor ) ) ;
64+ Assert . AreEqual ( TfLiteDataType . kTfLiteFloat32 , c_api_lite . TfLiteTensorType ( output_tensor ) ) ;
6565 Assert . AreEqual ( 1 , c_api_lite . TfLiteTensorNumDims ( output_tensor ) ) ;
6666 Assert . AreEqual ( 2 , c_api_lite . TfLiteTensorDim ( output_tensor , 0 ) ) ;
6767 Assert . AreEqual ( sizeof ( float ) * 2 , c_api_lite . TfLiteTensorByteSize ( output_tensor ) ) ;
@@ -83,5 +83,56 @@ public unsafe void SmokeTest()
8383
8484 c_api_lite . TfLiteInterpreterDelete ( interpreter . DangerousGetHandle ( ) ) ;
8585 }
86+
87+ [ TestMethod ]
88+ public unsafe void QuantizationParamsTest ( )
89+ {
90+ var model = c_api_lite . TfLiteModelCreateFromFile ( "Lite/testdata/add_quantized.bin" ) ;
91+ var interpreter = c_api_lite . TfLiteInterpreterCreate ( model , new SafeTfLiteInterpreterOptionsHandle ( IntPtr . Zero ) ) ;
92+ c_api_lite . TfLiteModelDelete ( model . DangerousGetHandle ( ) ) ;
93+ var input_dims = new [ ] { 2 } ;
94+ Assert . AreEqual ( TfLiteStatus . kTfLiteOk , c_api_lite . TfLiteInterpreterResizeInputTensor ( interpreter , 0 , input_dims , 1 ) ) ;
95+ Assert . AreEqual ( TfLiteStatus . kTfLiteOk , c_api_lite . TfLiteInterpreterAllocateTensors ( interpreter ) ) ;
96+
97+ var input_tensor = c_api_lite . TfLiteInterpreterGetInputTensor ( interpreter , 0 ) ;
98+ Assert . IsNotNull ( input_tensor ) ;
99+
100+ Assert . AreEqual ( TfLiteDataType . kTfLiteUInt8 , c_api_lite . TfLiteTensorType ( input_tensor ) ) ;
101+ Assert . AreEqual ( 1 , c_api_lite . TfLiteTensorNumDims ( input_tensor ) ) ;
102+ Assert . AreEqual ( 2 , c_api_lite . TfLiteTensorDim ( input_tensor , 0 ) ) ;
103+
104+ var input_params = c_api_lite . TfLiteTensorQuantizationParams ( input_tensor ) ;
105+ Assert . AreEqual ( ( 0.003922f , 0 ) , ( input_params . scale , input_params . zero_point ) ) ;
106+
107+ var input = new byte [ ] { 1 , 3 } ;
108+ fixed ( byte * addr = & input [ 0 ] )
109+ {
110+ Assert . AreEqual ( TfLiteStatus . kTfLiteOk ,
111+ c_api_lite . TfLiteTensorCopyFromBuffer ( input_tensor , new IntPtr ( addr ) , 2 * sizeof ( byte ) ) ) ;
112+ }
113+ Assert . AreEqual ( TfLiteStatus . kTfLiteOk , c_api_lite . TfLiteInterpreterInvoke ( interpreter ) ) ;
114+
115+ var output_tensor = c_api_lite . TfLiteInterpreterGetOutputTensor ( interpreter , 0 ) ;
116+ Assert . IsNotNull ( output_tensor ) ;
117+
118+ var output_params = c_api_lite . TfLiteTensorQuantizationParams ( output_tensor ) ;
119+ Assert . AreEqual ( ( 0.003922f , 0 ) , ( output_params . scale , output_params . zero_point ) ) ;
120+
121+ var output = new byte [ 2 ] ;
122+ fixed ( byte * addr = & output [ 0 ] )
123+ {
124+ Assert . AreEqual ( TfLiteStatus . kTfLiteOk ,
125+ c_api_lite . TfLiteTensorCopyToBuffer ( output_tensor , new IntPtr ( addr ) , 2 * sizeof ( byte ) ) ) ;
126+ }
127+ Assert . AreEqual ( 3f , output [ 0 ] ) ;
128+ Assert . AreEqual ( 9f , output [ 1 ] ) ;
129+
130+ var dequantizedOutput0 = output_params . scale * ( output [ 0 ] - output_params . zero_point ) ;
131+ var dequantizedOutput1 = output_params . scale * ( output [ 1 ] - output_params . zero_point ) ;
132+ Assert . AreEqual ( dequantizedOutput0 , 0.011766f ) ;
133+ Assert . AreEqual ( dequantizedOutput1 , 0.035298f ) ;
134+
135+ c_api_lite . TfLiteInterpreterDelete ( interpreter . DangerousGetHandle ( ) ) ;
136+ }
86137 }
87138}
0 commit comments