TestGenerated.cpp revision 6a0d306cf902e13ab147c7533b2cb02540ee66d5
1242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung/* 2242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * Copyright (C) 2017 The Android Open Source Project 3242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * 4242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * Licensed under the Apache License, Version 2.0 (the "License"); 5242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * you may not use this file except in compliance with the License. 6242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * You may obtain a copy of the License at 7242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * 8242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * http://www.apache.org/licenses/LICENSE-2.0 9242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * 10242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * Unless required by applicable law or agreed to in writing, software 11242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * distributed under the License is distributed on an "AS IS" BASIS, 12242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * See the License for the specific language governing permissions and 14242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung * limitations under the License. 15242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung */ 16242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 17ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung// Top level driver for models and examples generated by test_generator.py 18242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 19242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "NeuralNetworksWrapper.h" 206a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung#include "TestHarness.h" 21242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 22242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include <gtest/gtest.h> 23242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include <cassert> 24242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include <cmath> 25ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung#include <functional> 26242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include <iostream> 27242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include <map> 28242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 296a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sungnamespace generated_tests { 30ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sungusing namespace android::nn::wrapper; 316a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 32ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sungtemplate <typename T> 33ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sungclass Example { 34ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung public: 35ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung typedef T ElementType; 36ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung typedef std::pair<std::map<int, std::vector<T>>, 37ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::map<int, std::vector<T>>> 38ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung ExampleType; 39ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung 40ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung static bool Execute(std::function<void(Model*)> create_model, 41ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::vector<ExampleType>& examples, 42ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::function<bool(const T, const T)> compare) { 43ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung Model model; 44ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung create_model(&model); 45ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung 46ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung int example_no = 1; 47ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung bool error = false; 48ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung for (auto& example : examples) { 49ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung Request request(&model); 50ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung 51ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung // Go through all inputs 52ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung for (auto& i : example.first) { 53ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::vector<T>& input = i.second; 54ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung request.setInput(i.first, (const void*)input.data(), 55ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung input.size() * sizeof(T)); 56ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 57ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung 58ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::map<int, std::vector<T>> test_outputs; 59ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung 60ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung assert(example.second.size() == 1); 61ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung int output_no = 0; 62ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung for (auto& i : example.second) { 63ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::vector<T>& output = i.second; 64ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung test_outputs[i.first].resize(output.size()); 65ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::vector<T>& test_output = test_outputs[i.first]; 66ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung request.setOutput(output_no++, (void*)test_output.data(), 67ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung test_output.size() * sizeof(T)); 68ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 69ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung Result r = request.compute(); 70ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung if (r != Result::NO_ERROR) 71ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::cerr << "Request was not completed normally\n"; 72ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung bool mismatch = false; 73ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung for (auto& i : example.second) { 74ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung const std::vector<T>& test = test_outputs[i.first]; 75ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung const std::vector<T>& golden = i.second; 76ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung for (unsigned i = 0; i < golden.size(); i++) { 77ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung if (compare(golden[i], test[i])) { 78ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::cerr << " output[" << i << "] = " << (float)test[i] 79ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung << " (should be " << (float)golden[i] 80ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung << ")\n"; 81ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung error = error || true; 82ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung mismatch = mismatch || true; 83ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 84ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 85ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 86ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung if (mismatch) { 87ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::cerr << "Example: " << example_no++; 88ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::cerr << " failed\n"; 89ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 90ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 91ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung return error; 92ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung } 936a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 946a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung // Test driver for those generated from ml/nn/runtime/test/spec 956a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung static void Execute(std::function<void(Model*)> create_model, 966a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung std::vector<MixedTypedExampleType>& examples) { 976a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung Model model; 986a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung create_model(&model); 996a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1006a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung int example_no = 1; 1016a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung for (auto& example : examples) { 1026a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SCOPED_TRACE(example_no++); 1036a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1046a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung MixedTyped& inputs = example.first; 1056a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung MixedTyped& golden = example.second; 1066a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1076a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung Request request(&model); 1086a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1096a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung // Go through all ty-typed inputs 1106a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung#define SET_TYPED_TENSOR_INPUT(ty) \ 1116a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung for (auto& i : std::get<std::map<int, std::vector<ty>>>(inputs)) { \ 1126a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung request.setInput(i.first, (const void*)i.second.data(), \ 1136a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung i.second.size() * sizeof(ty)); \ 1146a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung } 1156a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1166a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SET_TYPED_TENSOR_INPUT(float); 1176a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SET_TYPED_TENSOR_INPUT(int32_t); 1186a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SET_TYPED_TENSOR_INPUT(uint8_t); 1196a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung#undef SET_TYPED_TENSOR_INPUT 1206a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1216a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung MixedTyped test; 1226a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung // Go through all typed outputs 1236a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung#define SET_TYPED_OUTPUT(ty) \ 1246a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung auto& golden_##ty = std::get<std::map<int, std::vector<ty>>>(golden); \ 1256a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung auto& test_##ty = std::get<std::map<int, std::vector<ty>>>(test); \ 1266a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung for (auto& i : golden_##ty) { \ 1276a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung int idx = i.first; \ 1286a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung auto& golden_output = i.second; \ 1296a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung test_##ty[idx].resize(golden_output.size()); \ 1306a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung request.setOutput(idx, (void*)test_##ty[idx].data(), \ 1316a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung test_##ty[idx].size() * sizeof(ty)); \ 1326a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung } 1336a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SET_TYPED_OUTPUT(float); 1346a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SET_TYPED_OUTPUT(int32_t); 1356a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung SET_TYPED_OUTPUT(uint8_t); 1366a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung#undef SET_TYPED_OUTPUT 1376a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1386a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung Result r = request.compute(); 1396a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung ASSERT_EQ(Result::NO_ERROR, r); 1406a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1416a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung EXPECT_EQ(golden_float, test_float); 1426a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung EXPECT_EQ(golden_int32_t, test_int32_t); 1436a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung EXPECT_EQ(golden_uint8_t, test_uint8_t); 1446a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung } 1456a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung } 146ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung}; 1476a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung}; // namespace generated_tests 148ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung 1496a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sungusing namespace android::nn::wrapper; 150ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung// Float32 examples 1516a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sungtypedef generated_tests::Example<float>::ExampleType Example; 1526a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung// Mixed-typed examples 1536a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sungtypedef generated_tests::MixedTypedExampleType MixedTypedExample; 154242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 1556a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sungvoid Execute(std::function<void(Model*)> create_model, 1566a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung std::vector<MixedTypedExample>& examples) { 1576a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung generated_tests::Example<float>::Execute(create_model, examples); 1586a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung} 159242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 1606a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sungclass GeneratedTests : public ::testing::Test { 1616a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung protected: 1626a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung virtual void SetUp() { 1636a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung ASSERT_EQ(android::nn::wrapper::Initialize(), 1646a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung android::nn::wrapper::Result::NO_ERROR); 1656a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung } 1666a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1676a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung virtual void TearDown() { android::nn::wrapper::Shutdown(); } 168dcd2fbf1da7ebdc1aa1b57c74db4fffd2911e3b8I-Jui (Ray) Sung}; 169dcd2fbf1da7ebdc1aa1b57c74db4fffd2911e3b8I-Jui (Ray) Sung 1706a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung// Testcases generated from runtime/test/specs/*.mod.py 1716a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung#include "generated/all_generated_tests.cpp" 1726a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung// End of testcases generated from runtime/test/specs/*.mod.py 1736a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung 1746a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung// Below are testcases geneated from TFLite testcases. 175242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace conv_1_h3_w2_SAME { 176242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungstd::vector<Example> examples = { 177242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Converted examples 178242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/examples/conv_1_h3_w2_SAME_tests.example.cc" 179242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung}; 180242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Generated model constructor 181242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/models/conv_1_h3_w2_SAME.model.cpp" 182242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace conv_1_h3_w2_SAME 183242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 184242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace conv_1_h3_w2_VALID { 185242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungstd::vector<Example> examples = { 186242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Converted examples 187242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/examples/conv_1_h3_w2_VALID_tests.example.cc" 188242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung}; 189242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Generated model constructor 190242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/models/conv_1_h3_w2_VALID.model.cpp" 191242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace conv_1_h3_w2_VALID 192242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 193242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace conv_3_h3_w2_SAME { 194242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungstd::vector<Example> examples = { 195242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Converted examples 196242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/examples/conv_3_h3_w2_SAME_tests.example.cc" 197242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung}; 198242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Generated model constructor 199242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/models/conv_3_h3_w2_SAME.model.cpp" 200242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace conv_3_h3_w2_SAME 201242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 202242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace conv_3_h3_w2_VALID { 203242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungstd::vector<Example> examples = { 204242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Converted examples 205242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/examples/conv_3_h3_w2_VALID_tests.example.cc" 206242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung}; 207242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Generated model constructor 208242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/models/conv_3_h3_w2_VALID.model.cpp" 209242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace conv_3_h3_w2_VALID 210242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 211242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace depthwise_conv { 212242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungstd::vector<Example> examples = { 213242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Converted examples 214242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/examples/depthwise_conv_tests.example.cc" 215242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung}; 216242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Generated model constructor 217242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/models/depthwise_conv.model.cpp" 218242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace depthwise_conv 219242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 220242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace mobilenet { 221242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungstd::vector<Example> examples = { 222242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Converted examples 223242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/examples/mobilenet_224_gender_basic_fixed_tests.example.cc" 224242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung}; 225242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung// Generated model constructor 226242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung#include "generated/models/mobilenet_224_gender_basic_fixed.model.cpp" 227242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace mobilenet 228242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 229242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sungnamespace { 230ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sungbool Execute(std::function<void(Model*)> create_model, 231ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung std::vector<Example>& examples) { 2326a0d306cf902e13ab147c7533b2cb02540ee66d5I-Jui (Ray) Sung return generated_tests::Example<float>::Execute( 233ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung create_model, examples, [](float golden, float test) { 234ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung return std::fabs(golden - test) > 1.5e-5f; 235ad36b7a0dd7468bbe6a0433a52cbf89561ff5538I-Jui (Ray) Sung }); 236242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 237242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} // namespace 238242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 239dcd2fbf1da7ebdc1aa1b57c74db4fffd2911e3b8I-Jui (Ray) Sung 240242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) SungTEST_F(GeneratedTests, conv_1_h3_w2_SAME) { 241242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung ASSERT_EQ( 242242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung Execute(conv_1_h3_w2_SAME::CreateModel, conv_1_h3_w2_SAME::examples), 243242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 0); 244242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 245242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 246242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) SungTEST_F(GeneratedTests, conv_1_h3_w2_VALID) { 247242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung ASSERT_EQ( 248242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung Execute(conv_1_h3_w2_VALID::CreateModel, conv_1_h3_w2_VALID::examples), 249242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 0); 250242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 251242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 252242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) SungTEST_F(GeneratedTests, conv_3_h3_w2_SAME) { 253242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung ASSERT_EQ( 254242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung Execute(conv_3_h3_w2_SAME::CreateModel, conv_3_h3_w2_SAME::examples), 255242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 0); 256242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 257242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 258242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) SungTEST_F(GeneratedTests, conv_3_h3_w2_VALID) { 259242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung ASSERT_EQ( 260242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung Execute(conv_3_h3_w2_VALID::CreateModel, conv_3_h3_w2_VALID::examples), 261242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 0); 262242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 263242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 264242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) SungTEST_F(GeneratedTests, depthwise_conv) { 265242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung ASSERT_EQ(Execute(depthwise_conv::CreateModel, depthwise_conv::examples), 266242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 0); 267242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 268242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung 269242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) SungTEST_F(GeneratedTests, mobilenet) { 270242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung ASSERT_EQ(Execute(mobilenet::CreateModel, mobilenet::examples), 0); 271242c6dc1f314646f1a87c66140f26d7623cc399aI-Jui (Ray) Sung} 272