Add a generated test for HashTable_Lookup 4-D (#3381)
author장지섭/동작제어Lab(SR)/Engineer/삼성전자 <jiseob.jang@samsung.com>
Mon, 29 Oct 2018 11:30:47 +0000 (20:30 +0900)
committer오형석/동작제어Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Mon, 29 Oct 2018 11:30:47 +0000 (20:30 +0900)
This commit add a generated test for HashTable_Lookup 4-D.

Signed-off-by: jiseob.jang <jiseob.jang@samsung.com>
runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp
runtimes/tests/neural_networks_test/generated/examples/hashtable_lookup_float_4D_nnfw.example.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/generated/models/hashtable_lookup_float_4D_nnfw.model.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/specs/V1_0/hashtable_lookup_float_4D_nnfw.mod.py [new file with mode: 0644]

index 7cc865e..ae60402 100644 (file)
@@ -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<MixedTypedExample> 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<MixedTypedExample> 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 (file)
index 0000000..e7fca67
--- /dev/null
@@ -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 (file)
index 0000000..b6aee04
--- /dev/null
@@ -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<int> 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 (file)
index 0000000..9db9f27
--- /dev/null
@@ -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))