Bring nn api test for sub.broadcast (#1563)
author이상규/동작제어Lab(SR)/Principal Engineer/삼성전자 <sg5.lee@samsung.com>
Tue, 5 Jun 2018 08:36:37 +0000 (17:36 +0900)
committer오형석/동작제어Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Tue, 5 Jun 2018 08:36:37 +0000 (17:36 +0900)
Related issue: #1338, #1379

NN API test for sub.broadcast is added. (Both of spec and generated c++ sources)
This code is based on Android NN `efd22b6`.
It is modified to test broadcasting of scalar value.

In addition, it fails. So I include it into skip lists.

Signed-off-by: Sanggyu Lee <sg5.lee@samsung.com>
runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp
runtimes/tests/neural_networks_test/generated/examples/sub_broadcast_float.example.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/generated/models/sub_broadcast_float.model.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/runtime_run_android_nn_test.skip.armv7l-linux
runtimes/tests/neural_networks_test/runtime_run_android_nn_test.skip.armv7l-tizen
runtimes/tests/neural_networks_test/runtime_run_android_nn_test.skip.x86_64-linux
runtimes/tests/neural_networks_test/specs/Ex/sub_broadcast_float.mod.py [new file with mode: 0644]

index 37d5a84..798d8f1 100644 (file)
@@ -2479,6 +2479,20 @@ TEST_F(GeneratedTests, strided_slice_ex_float_9) {
             strided_slice_ex_float_9::examples);
 }
 
+namespace sub_broadcast_float {
+std::vector<MixedTypedExample> examples = {
+// Generated sub_broadcast_float test
+#include "generated/examples/sub_broadcast_float.example.cpp"
+};
+// Generated model constructor
+#include "generated/models/sub_broadcast_float.model.cpp"
+} // namespace sub_broadcast_float
+TEST_F(GeneratedTests, sub_broadcast_float) {
+    execute(sub_broadcast_float::CreateModel,
+            sub_broadcast_float::is_ignored,
+            sub_broadcast_float::examples);
+}
+
 namespace tensorflowmax_ex_2D_float {
 std::vector<MixedTypedExample> examples = {
 // Generated tensorflowmax_ex_2D_float test
diff --git a/runtimes/tests/neural_networks_test/generated/examples/sub_broadcast_float.example.cpp b/runtimes/tests/neural_networks_test/generated/examples/sub_broadcast_float.example.cpp
new file mode 100644 (file)
index 0000000..f11c66d
--- /dev/null
@@ -0,0 +1,22 @@
+// Generated file (from: sub_broadcast_float.mod.py). Do not edit
+// Begin of an example
+{
+//Input(s)
+{ // See tools/test_generator/include/TestHarness.h:MixedTyped
+  // int -> FLOAT32 map
+  {{0, {1, 2, 3, 4}}, {1, {2}}},
+  // int -> INT32 map
+  {},
+  // int -> QUANT8_ASYMM map
+  {}
+},
+//Output(s)
+{ // See tools/test_generator/include/TestHarness.h:MixedTyped
+  // int -> FLOAT32 map
+  {{0, {-1, 0, 1, 2}}},
+  // int -> INT32 map
+  {},
+  // int -> QUANT8_ASYMM map
+  {}
+}
+}, // End of an example
diff --git a/runtimes/tests/neural_networks_test/generated/models/sub_broadcast_float.model.cpp b/runtimes/tests/neural_networks_test/generated/models/sub_broadcast_float.model.cpp
new file mode 100644 (file)
index 0000000..f48feaf
--- /dev/null
@@ -0,0 +1,25 @@
+// Generated file (from: sub_broadcast_float.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type0(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
+  OperandType type1(Type::TENSOR_FLOAT32, {1});
+  // Phase 1, operands
+  auto op1 = model->addOperand(&type0);
+  auto op2 = model->addOperand(&type1);
+  auto act = model->addOperand(&type2);
+  auto op3 = model->addOperand(&type0);
+  // Phase 2, operations
+  static int32_t act_init[] = {0};
+  model->setOperandValue(act, act_init, sizeof(int32_t) * 1);
+  model->addOperationEx(ANEURALNETWORKS_SUB_EX, {op1, op2, act}, {op3});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {op1, op2},
+    {op3});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
index 5fc7434..eb05197 100644 (file)
@@ -61,6 +61,7 @@ GeneratedTests.strided_slice_float_9
 GeneratedTests.strided_slice
 GeneratedTests.tensorflowmax_ex_2D_float
 GeneratedTests.tensorflowmax_ex_2D_int32
+GeneratedTests.sub_broadcast_float
 # =====================
 # Fails in ACL kernel
 # =====================
index d8208e7..581c0bb 100644 (file)
@@ -61,6 +61,7 @@ GeneratedTests.strided_slice_float_9
 GeneratedTests.strided_slice
 GeneratedTests.tensorflowmax_ex_2D_float
 GeneratedTests.tensorflowmax_ex_2D_int32
+GeneratedTests.sub_broadcast_float
 # =====================
 # Fails in ACL kernel
 # =====================
index dcee185..97bf76f 100644 (file)
@@ -61,3 +61,4 @@ GeneratedTests.strided_slice_float_9
 GeneratedTests.strided_slice
 GeneratedTests.tensorflowmax_ex_2D_float
 GeneratedTests.tensorflowmax_ex_2D_int32
+GeneratedTests.sub_broadcast_float
diff --git a/runtimes/tests/neural_networks_test/specs/Ex/sub_broadcast_float.mod.py b/runtimes/tests/neural_networks_test/specs/Ex/sub_broadcast_float.mod.py
new file mode 100644 (file)
index 0000000..2a3ee5e
--- /dev/null
@@ -0,0 +1,19 @@
+# model
+model = Model()
+i1 = Input("op1", "TENSOR_FLOAT32", "{1, 2, 2, 1}")
+i2 = Input("op2", "TENSOR_FLOAT32", "{1}")
+act = Int32Scalar("act", 0)
+i3 = Output("op3", "TENSOR_FLOAT32", "{1, 2, 2, 1}")
+model = model.Operation("SUB_EX", i1, i2, act).To(i3)
+
+# Example 1. Input in operand 0,
+input0 = {i1: # input 0
+          [1, 2, 3, 4],
+          i2: # input 1
+          [2]}
+
+output0 = {i3: # output 0
+           [-1, 0, 1, 2]}
+
+# Instantiate an example
+Example((input0, output0))