Add larger unit test for CONCATENATION op for quant8.

Bug: 63905942
Test: NeuralNetworksTest on Angler
Change-Id: I153b3408c5779255361b97656cf7859d888a99a8
diff --git a/runtime/test/specs/concat_quant8.mod.py b/runtime/test/specs/concat_quant8.mod.py
deleted file mode 100644
index b9256f6..0000000
--- a/runtime/test/specs/concat_quant8.mod.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# model
-model = Model()
-i1 = Input("op1", "TENSOR_QUANT8_ASYMM", "{2, 3}, 0.5f, 0") # input 0
-i2 = Input("op2", "TENSOR_QUANT8_ASYMM", "{2, 3}, 0.5f, 0") # input 1
-axis1 = Int32Scalar("axis1", 1)
-act0 = Int32Scalar("act0", 0)
-r = Output("result", "TENSOR_QUANT8_ASYMM", "{2, 6}, 0.5f, 0") # output
-model = model.Operation("CONCATENATION", i1, i2, axis1, act0).To(r)
-
-# Example 1.
-input0 = {i1: [1, 2, 3, 4, 5, 6],
-          i2: [7, 8, 9, 10, 11, 12]}
-output0 = {r: [1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12]}
-
-# Instantiate an example
-Example((input0, output0))
diff --git a/runtime/test/specs/concat_quant8_1.mod.py b/runtime/test/specs/concat_quant8_1.mod.py
new file mode 100644
index 0000000..248c42a
--- /dev/null
+++ b/runtime/test/specs/concat_quant8_1.mod.py
@@ -0,0 +1,32 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+#
+
+# model
+model = Model()
+i1 = Input("op1", "TENSOR_QUANT8_ASYMM", "{2, 3}, 0.5f, 0") # input 0
+i2 = Input("op2", "TENSOR_QUANT8_ASYMM", "{2, 3}, 0.5f, 0") # input 1
+axis1 = Int32Scalar("axis1", 1)
+act0 = Int32Scalar("act0", 0)
+r = Output("result", "TENSOR_QUANT8_ASYMM", "{2, 6}, 0.5f, 0") # output
+model = model.Operation("CONCATENATION", i1, i2, axis1, act0).To(r)
+
+# Example 1.
+input0 = {i1: [1, 2, 3, 4, 5, 6],
+          i2: [7, 8, 9, 10, 11, 12]}
+output0 = {r: [1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12]}
+
+# Instantiate an example
+Example((input0, output0))
diff --git a/runtime/test/specs/concat_quant8_2.mod.py b/runtime/test/specs/concat_quant8_2.mod.py
new file mode 100644
index 0000000..774b591
--- /dev/null
+++ b/runtime/test/specs/concat_quant8_2.mod.py
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+#
+
+# model
+model = Model()
+
+row1 = 512
+row2 = 256
+col = 1024
+output_row = row1 + row2
+
+input1 = Input("input1", "TENSOR_QUANT8_ASYMM", "{%d, %d}, 0.5f, 0" % (row1, col))
+input2 = Input("input2", "TENSOR_QUANT8_ASYMM", "{%d, %d}, 0.5f, 0" % (row2, col))
+axis0 = Int32Scalar("axis0", 0)
+act0 = Int32Scalar("act0", 0)
+output = Output("output", "TENSOR_QUANT8_ASYMM", "{%d, %d}, 0.5f, 0" % (output_row, col))
+model = model.Operation("CONCATENATION", input1, input2, axis0, act0).To(output)
+
+# Example 1.
+input1_values = [x % 256 for x in range(row1 * col)]
+input2_values = (lambda s1 = row1 * col, s2 = row2 * col:
+                 [(x + s1) % 256 for x in range(s2)])()
+input0 = {input1: input1_values,
+          input2: input2_values}
+output_values = [x % 256 for x in range(output_row * col)]
+output0 = {output: output_values}
+
+# Instantiate an example
+Example((input0, output0))
diff --git a/runtime/test/specs/concat_quant8_3.mod.py b/runtime/test/specs/concat_quant8_3.mod.py
new file mode 100644
index 0000000..75db610
--- /dev/null
+++ b/runtime/test/specs/concat_quant8_3.mod.py
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+#
+
+# model
+model = Model()
+
+row = 1024
+col1 = 512
+col2 = 256
+output_col = col1 + col2
+
+input1 = Input("input1", "TENSOR_QUANT8_ASYMM", "{%d, %d}, 0.5f, 0" % (row, col1))
+input2 = Input("input2", "TENSOR_QUANT8_ASYMM", "{%d, %d}, 0.5f, 0" % (row, col2))
+axis1 = Int32Scalar("axis1", 1)
+act2 = Int32Scalar("relu1_activation", 2)
+output = Output("output", "TENSOR_QUANT8_ASYMM", "{%d, %d}, 0.5f, 0" % (row, output_col))
+model = model.Operation("CONCATENATION", input1, input2, axis1, act1).To(output)
+
+# Example 1.
+input1_values = [(x % 128 + 128) for x in range(row * col1)]
+input2_values = [x % 128 for x in range(row * col2)]
+input0 = {input1: input1_values,
+          input2: input2_values}
+
+output_values = [x for x in range(row * output_col)]
+for r in range(row):
+  # TODO(b/67185615): Cap the output values at 1 when the bug is fxed.
+  for c1 in range(col1):
+    output_values[r * output_col + c1] = input1_values[r * col1 + c1]
+  for c2 in range(col2):
+    output_values[r * output_col + col1 + c2] = input2_values[r * col2 + c2]
+
+output0 = {output: output_values}
+
+# Instantiate an example
+Example((input0, output0))