| 24 | namespace { |
| 25 | |
| 26 | void TestCeil(std::initializer_list<int> input_dims_data, |
| 27 | std::initializer_list<float> input_data, |
| 28 | std::initializer_list<float> expected_output_data, |
| 29 | float* output_data) { |
| 30 | TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data); |
| 31 | TfLiteIntArray* output_dims = IntArrayFromInitializer(input_dims_data); |
| 32 | const int output_dims_count = ElementCount(*output_dims); |
| 33 | constexpr int inputs_size = 1; |
| 34 | constexpr int outputs_size = 1; |
| 35 | constexpr int tensors_size = inputs_size + outputs_size; |
| 36 | TfLiteTensor tensors[tensors_size] = { |
| 37 | CreateFloatTensor(input_data, input_dims, "input_tensor"), |
| 38 | CreateFloatTensor(output_data, output_dims, "output_tensor"), |
| 39 | }; |
| 40 | TfLiteContext context; |
| 41 | PopulateContext(tensors, tensors_size, &context); |
| 42 | ::tflite::ops::micro::AllOpsResolver resolver; |
| 43 | const TfLiteRegistration* registration = |
| 44 | resolver.FindOp(tflite::BuiltinOperator_CEIL, 1); |
| 45 | TF_LITE_MICRO_EXPECT_NE(nullptr, registration); |
| 46 | |
| 47 | int inputs_array_data[] = {1, 0}; |
| 48 | TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data); |
| 49 | int outputs_array_data[] = {1, 1}; |
| 50 | TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data); |
| 51 | TfLiteIntArray* temporaries_array = IntArrayFromInitializer({0}); |
| 52 | TfLiteNode node; |
| 53 | node.inputs = inputs_array; |
| 54 | node.outputs = outputs_array; |
| 55 | node.temporaries = temporaries_array; |
| 56 | node.user_data = nullptr; |
| 57 | node.builtin_data = nullptr; |
| 58 | node.custom_initial_data = nullptr; |
| 59 | node.custom_initial_data_size = 0; |
| 60 | node.delegate = nullptr; |
| 61 | TF_LITE_MICRO_EXPECT_NE(nullptr, registration->invoke); |
| 62 | TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, registration->invoke(&context, &node)); |
| 63 | for (int i = 0; i < output_dims_count; ++i) { |
| 64 | TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i], |
| 65 | 1e-5f); |
| 66 | } |
| 67 | } |
| 68 | |
| 69 | } // namespace |
| 70 | } // namespace testing |
no test coverage detected