From 48a7103666a2656426cce8e2ffa03b1d2dd91f29 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9E=A5=EC=A7=80=EC=84=AD/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Engineer/=EC=82=BC=EC=84=B1=EC=A0=84?= =?utf8?q?=EC=9E=90?= Date: Mon, 29 Oct 2018 20:30:47 +0900 Subject: [PATCH] Add a generated test for HashTable_Lookup 4-D (#3381) This commit add a generated test for HashTable_Lookup 4-D. Signed-off-by: jiseob.jang --- .../generated/all_generated_tests.cpp | 14 +++++ .../hashtable_lookup_float_4D_nnfw.example.cpp | 22 ++++++++ .../hashtable_lookup_float_4D_nnfw.model.cpp | 26 +++++++++ .../V1_0/hashtable_lookup_float_4D_nnfw.mod.py | 62 ++++++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 runtimes/tests/neural_networks_test/generated/examples/hashtable_lookup_float_4D_nnfw.example.cpp create mode 100644 runtimes/tests/neural_networks_test/generated/models/hashtable_lookup_float_4D_nnfw.model.cpp create mode 100644 runtimes/tests/neural_networks_test/specs/V1_0/hashtable_lookup_float_4D_nnfw.mod.py diff --git a/runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp b/runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp index 7cc865e..ae60402 100644 --- a/runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp +++ b/runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp @@ -1065,6 +1065,20 @@ TEST_F(GeneratedTests, fully_connected_quant8_weights_as_inputs) { fully_connected_quant8_weights_as_inputs::examples); } +namespace hashtable_lookup_float_4D_nnfw { +std::vector examples = { +// Generated hashtable_lookup_float_4D_nnfw test +#include "generated/examples/hashtable_lookup_float_4D_nnfw.example.cpp" +}; +// Generated model constructor +#include "generated/models/hashtable_lookup_float_4D_nnfw.model.cpp" +} // namespace hashtable_lookup_float_4D_nnfw +TEST_F(GeneratedTests, hashtable_lookup_float_4D_nnfw) { + execute(hashtable_lookup_float_4D_nnfw::CreateModel, + hashtable_lookup_float_4D_nnfw::is_ignored, + hashtable_lookup_float_4D_nnfw::examples); +} + namespace hashtable_lookup_float { std::vector examples = { // Generated hashtable_lookup_float test diff --git a/runtimes/tests/neural_networks_test/generated/examples/hashtable_lookup_float_4D_nnfw.example.cpp b/runtimes/tests/neural_networks_test/generated/examples/hashtable_lookup_float_4D_nnfw.example.cpp new file mode 100644 index 0000000..e7fca67 --- /dev/null +++ b/runtimes/tests/neural_networks_test/generated/examples/hashtable_lookup_float_4D_nnfw.example.cpp @@ -0,0 +1,22 @@ +// Generated file (from: hashtable_lookup_float_4D_nnfw.mod.py). Do not edit +// Begin of an example +{ +//Input(s) +{ // See tools/test_generator/include/TestHarness.h:MixedTyped + // int -> FLOAT32 map + {{2, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119}}}, + // int -> INT32 map + {{0, {1234, -292, -11, 0}}, {1, {-11, 0, 1234}}}, + // int -> QUANT8_ASYMM map + {} +}, +//Output(s) +{ // See tools/test_generator/include/TestHarness.h:MixedTyped + // int -> FLOAT32 map + {{0, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79}}}, + // int -> INT32 map + {}, + // int -> QUANT8_ASYMM map + {{1, {1, 0, 1, 1}}} +} +}, // End of an example diff --git a/runtimes/tests/neural_networks_test/generated/models/hashtable_lookup_float_4D_nnfw.model.cpp b/runtimes/tests/neural_networks_test/generated/models/hashtable_lookup_float_4D_nnfw.model.cpp new file mode 100644 index 0000000..b6aee04 --- /dev/null +++ b/runtimes/tests/neural_networks_test/generated/models/hashtable_lookup_float_4D_nnfw.model.cpp @@ -0,0 +1,26 @@ +// Generated file (from: hashtable_lookup_float_4D_nnfw.mod.py). Do not edit +void CreateModel(Model *model) { + OperandType type2(Type::TENSOR_FLOAT32, {3, 4, 5, 2}); + OperandType type3(Type::TENSOR_FLOAT32, {4, 4, 5, 2}); + OperandType type1(Type::TENSOR_INT32, {3}); + OperandType type0(Type::TENSOR_INT32, {4}); + OperandType type4(Type::TENSOR_QUANT8_ASYMM, {4}, 1.f, 0); + // Phase 1, operands + auto lookup = model->addOperand(&type0); + auto key = model->addOperand(&type1); + auto value = model->addOperand(&type2); + auto output = model->addOperand(&type3); + auto hits = model->addOperand(&type4); + // Phase 2, operations + model->addOperation(ANEURALNETWORKS_HASHTABLE_LOOKUP, {lookup, key, value}, {output, hits}); + // Phase 3, inputs and outputs + model->identifyInputsAndOutputs( + {lookup, key, value}, + {output, hits}); + assert(model->isValid()); +} + +bool is_ignored(int i) { + static std::set ignore = {}; + return ignore.find(i) != ignore.end(); +} diff --git a/runtimes/tests/neural_networks_test/specs/V1_0/hashtable_lookup_float_4D_nnfw.mod.py b/runtimes/tests/neural_networks_test/specs/V1_0/hashtable_lookup_float_4D_nnfw.mod.py new file mode 100644 index 0000000..9db9f27 --- /dev/null +++ b/runtimes/tests/neural_networks_test/specs/V1_0/hashtable_lookup_float_4D_nnfw.mod.py @@ -0,0 +1,62 @@ +# +# Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +lookups = 4 +keys = 3 +batchs = 3 +cols = 4 +rows = 5 +features = 2 + +table = [x for x in range(batchs * cols * rows * features)] +for i in range(batchs): + for j in range(cols): + for k in range(rows): + for l in range(features): + table[i * cols * rows * features + j * rows * features + k * features + l] = i * cols * rows * features + j * rows * features + k * features + l + +model = Model() + +lookup = Input("lookup", "TENSOR_INT32", "{%d}" % lookups) +key = Input("key", "TENSOR_INT32", "{%d}" % (keys)) +value = Input("value", "TENSOR_FLOAT32", "{%d, %d, %d, %d}" % (batchs, cols, rows, features)) +output = Output("output", "TENSOR_FLOAT32", "{%d, %d, %d, %d}" % (lookups, cols, rows, features)) +hits = Output("hits", "TENSOR_QUANT8_ASYMM", "{%d}, 1.f, 0" % (lookups)) +model = model.Operation("HASHTABLE_LOOKUP", lookup, key, value).To([output, hits]) + +input0 = {lookup: [1234, -292, -11, 0], + key: [-11, 0, 1234], + value: table} + +output0 = {output: + [ + # 2-rd item + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + # Not found + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + # 0-th item + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + # 1-st item + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + ], + hits: + [ + 1, 0, 1, 1, + ] +} + +# Instantiate an example +Example((input0, output0)) -- 2.7.4