Add more tests for v1.1 ops

Bug: 63911257
Test: mm
Test: NeuralNetworksTests and VTS tests pass
Change-Id: Ia9674e5bed390fd2507c6c70f1a37737f7733ae9
diff --git a/nn/runtime/test/generated/models/batch_to_space_float_1.model.cpp b/nn/runtime/test/generated/models/batch_to_space_float_1.model.cpp
new file mode 100644
index 0000000..7fb6243
--- /dev/null
+++ b/nn/runtime/test/generated/models/batch_to_space_float_1.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: batch_to_space_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type3(Type::TENSOR_FLOAT32, {1, 4, 4, 1});
+  OperandType type0(Type::TENSOR_FLOAT32, {4, 2, 2, 1});
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto crops = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {2, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t crops_init[] = {0, 0, 0, 0};
+  model->setOperandValue(crops, crops_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_BATCH_TO_SPACE_ND, {input, block_size, crops}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/batch_to_space_quant8_1.model.cpp b/nn/runtime/test/generated/models/batch_to_space_quant8_1.model.cpp
new file mode 100644
index 0000000..5a66696
--- /dev/null
+++ b/nn/runtime/test/generated/models/batch_to_space_quant8_1.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: batch_to_space_quant8_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 4, 4, 1}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4, 2, 2, 1}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto crops = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {2, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t crops_init[] = {0, 0, 0, 0};
+  model->setOperandValue(crops, crops_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_BATCH_TO_SPACE_ND, {input, block_size, crops}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/mean_float_1.model.cpp b/nn/runtime/test/generated/models/mean_float_1.model.cpp
new file mode 100644
index 0000000..7a3ce25
--- /dev/null
+++ b/nn/runtime/test/generated/models/mean_float_1.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: mean_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {2});
+  OperandType type0(Type::TENSOR_FLOAT32, {4, 3, 2});
+  OperandType type1(Type::TENSOR_INT32, {4});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto axis = model->addOperand(&type1);
+  auto keepDims = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t axis_init[] = {1, 0, -3, -3};
+  model->setOperandValue(axis, axis_init, sizeof(int32_t) * 4);
+  static int32_t keepDims_init[] = {0};
+  model->setOperandValue(keepDims, keepDims_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_MEAN, {input, axis, keepDims}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/mean_float_2.model.cpp b/nn/runtime/test/generated/models/mean_float_2.model.cpp
new file mode 100644
index 0000000..9838db4
--- /dev/null
+++ b/nn/runtime/test/generated/models/mean_float_2.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: mean_float_2.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {1, 3, 1});
+  OperandType type0(Type::TENSOR_FLOAT32, {4, 3, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto axis = model->addOperand(&type1);
+  auto keepDims = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t axis_init[] = {0, 2};
+  model->setOperandValue(axis, axis_init, sizeof(int32_t) * 2);
+  static int32_t keepDims_init[] = {1};
+  model->setOperandValue(keepDims, keepDims_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_MEAN, {input, axis, keepDims}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/pad_float_1.model.cpp b/nn/runtime/test/generated/models/pad_float_1.model.cpp
new file mode 100644
index 0000000..61ae0b7
--- /dev/null
+++ b/nn/runtime/test/generated/models/pad_float_1.model.cpp
@@ -0,0 +1,24 @@
+// Generated file (from: pad_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type0(Type::TENSOR_FLOAT32, {1, 2, 3, 1});
+  OperandType type2(Type::TENSOR_FLOAT32, {1, 4, 7, 1});
+  OperandType type1(Type::TENSOR_INT32, {4, 2});
+  // Phase 1, operands
+  auto op1 = model->addOperand(&type0);
+  auto op2 = model->addOperand(&type1);
+  auto op3 = model->addOperand(&type2);
+  // Phase 2, operations
+  static int32_t op2_init[] = {0, 0, 0, 2, 1, 3, 0, 0};
+  model->setOperandValue(op2, op2_init, sizeof(int32_t) * 8);
+  model->addOperation(ANEURALNETWORKS_PAD, {op1, op2}, {op3});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {op1},
+    {op3});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/space_to_batch_float_1.model.cpp b/nn/runtime/test/generated/models/space_to_batch_float_1.model.cpp
new file mode 100644
index 0000000..f4dfab9
--- /dev/null
+++ b/nn/runtime/test/generated/models/space_to_batch_float_1.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type0(Type::TENSOR_FLOAT32, {1, 4, 4, 1});
+  OperandType type3(Type::TENSOR_FLOAT32, {4, 2, 2, 1});
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {2, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {0, 0, 0, 0};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/space_to_batch_float_2.model.cpp b/nn/runtime/test/generated/models/space_to_batch_float_2.model.cpp
new file mode 100644
index 0000000..44dee00
--- /dev/null
+++ b/nn/runtime/test/generated/models/space_to_batch_float_2.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_float_2.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type0(Type::TENSOR_FLOAT32, {1, 5, 2, 1});
+  OperandType type3(Type::TENSOR_FLOAT32, {6, 2, 2, 1});
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {3, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {1, 0, 2, 0};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/space_to_batch_float_3.model.cpp b/nn/runtime/test/generated/models/space_to_batch_float_3.model.cpp
new file mode 100644
index 0000000..f2fa990
--- /dev/null
+++ b/nn/runtime/test/generated/models/space_to_batch_float_3.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_float_3.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type0(Type::TENSOR_FLOAT32, {1, 4, 2, 1});
+  OperandType type3(Type::TENSOR_FLOAT32, {6, 2, 4, 1});
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {3, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {1, 1, 2, 4};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/space_to_batch_quant8_1.model.cpp b/nn/runtime/test/generated/models/space_to_batch_quant8_1.model.cpp
new file mode 100644
index 0000000..cfd56c2
--- /dev/null
+++ b/nn/runtime/test/generated/models/space_to_batch_quant8_1.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_quant8_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 4, 4, 1}, 1.0, 0);
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {4, 2, 2, 1}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {2, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {0, 0, 0, 0};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/space_to_batch_quant8_2.model.cpp b/nn/runtime/test/generated/models/space_to_batch_quant8_2.model.cpp
new file mode 100644
index 0000000..8ab61a1
--- /dev/null
+++ b/nn/runtime/test/generated/models/space_to_batch_quant8_2.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_quant8_2.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 5, 2, 1}, 1.0, 0);
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {6, 2, 2, 1}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {3, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {1, 0, 2, 0};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/space_to_batch_quant8_3.model.cpp b/nn/runtime/test/generated/models/space_to_batch_quant8_3.model.cpp
new file mode 100644
index 0000000..7ee3884
--- /dev/null
+++ b/nn/runtime/test/generated/models/space_to_batch_quant8_3.model.cpp
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_quant8_3.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 4, 2, 1}, 1.0, 0);
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {6, 2, 4, 1}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {3, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {1, 1, 2, 4};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/squeeze_float_1.model.cpp b/nn/runtime/test/generated/models/squeeze_float_1.model.cpp
new file mode 100644
index 0000000..2277e38
--- /dev/null
+++ b/nn/runtime/test/generated/models/squeeze_float_1.model.cpp
@@ -0,0 +1,24 @@
+// Generated file (from: squeeze_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type0(Type::TENSOR_FLOAT32, {1, 24, 1});
+  OperandType type2(Type::TENSOR_FLOAT32, {1, 24});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto squeezeDims = model->addOperand(&type1);
+  auto output = model->addOperand(&type2);
+  // Phase 2, operations
+  static int32_t squeezeDims_init[] = {2};
+  model->setOperandValue(squeezeDims, squeezeDims_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_SQUEEZE, {input, squeezeDims}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/squeeze_quant8_1.model.cpp b/nn/runtime/test/generated/models/squeeze_quant8_1.model.cpp
new file mode 100644
index 0000000..f122d43
--- /dev/null
+++ b/nn/runtime/test/generated/models/squeeze_quant8_1.model.cpp
@@ -0,0 +1,24 @@
+// Generated file (from: squeeze_quant8_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 24, 1}, 1.0, 0);
+  OperandType type2(Type::TENSOR_QUANT8_ASYMM, {1, 24}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto squeezeDims = model->addOperand(&type1);
+  auto output = model->addOperand(&type2);
+  // Phase 2, operations
+  static int32_t squeezeDims_init[] = {2};
+  model->setOperandValue(squeezeDims, squeezeDims_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_SQUEEZE, {input, squeezeDims}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_1.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_1.model.cpp
new file mode 100644
index 0000000..98adfcc
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_1.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {2});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_10.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_10.model.cpp
new file mode 100644
index 0000000..6fecfd3
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_10.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_10.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {1, 3});
+  OperandType type0(Type::TENSOR_FLOAT32, {2, 3});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1, 0};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 2);
+  static int32_t ends_init[] = {2, 2};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 2);
+  static int32_t strides_init[] = {1, 1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 2);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {2};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_2.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_2.model.cpp
new file mode 100644
index 0000000..81e8796
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_2.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_2.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {2});
+  OperandType type0(Type::TENSOR_FLOAT32, {4});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {-3};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_3.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_3.model.cpp
new file mode 100644
index 0000000..343455a
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_3.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_3.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {3});
+  OperandType type0(Type::TENSOR_FLOAT32, {4});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {-5};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_4.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_4.model.cpp
new file mode 100644
index 0000000..b7524de
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_4.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_4.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {1});
+  OperandType type0(Type::TENSOR_FLOAT32, {4});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {-2};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_5.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_5.model.cpp
new file mode 100644
index 0000000..a590fc5
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_5.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_5.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {3});
+  OperandType type0(Type::TENSOR_FLOAT32, {4});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {1};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_6.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_6.model.cpp
new file mode 100644
index 0000000..db1de2b
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_6.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_6.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {3});
+  OperandType type0(Type::TENSOR_FLOAT32, {4});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {1};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_7.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_7.model.cpp
new file mode 100644
index 0000000..d4d12e9
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_7.model.cpp
@@ -0,0 +1,36 @@
+// Generated file (from: strided_slice_float_7.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type0(Type::TENSOR_FLOAT32, {3});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type0);
+  // Phase 2, operations
+  static int32_t begins_init[] = {-1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {-4};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {-1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_8.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_8.model.cpp
new file mode 100644
index 0000000..30c96b5
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_8.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_8.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {1, 3});
+  OperandType type0(Type::TENSOR_FLOAT32, {2, 3});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1, -1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 2);
+  static int32_t ends_init[] = {2, -4};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 2);
+  static int32_t strides_init[] = {2, -1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 2);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_float_9.model.cpp b/nn/runtime/test/generated/models/strided_slice_float_9.model.cpp
new file mode 100644
index 0000000..a93a1f8
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_float_9.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_float_9.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {2, 2});
+  OperandType type0(Type::TENSOR_FLOAT32, {2, 3});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1, 0};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 2);
+  static int32_t ends_init[] = {2, 2};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 2);
+  static int32_t strides_init[] = {1, 1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 2);
+  static int32_t beginMask_init[] = {1};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_qaunt8_10.model.cpp b/nn/runtime/test/generated/models/strided_slice_qaunt8_10.model.cpp
new file mode 100644
index 0000000..c201e7d
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_qaunt8_10.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_qaunt8_10.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 3}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1, 0};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 2);
+  static int32_t ends_init[] = {2, 2};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 2);
+  static int32_t strides_init[] = {1, 1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 2);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {2};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_1.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_1.model.cpp
new file mode 100644
index 0000000..2fed767
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_1.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type3(Type::TENSOR_FLOAT32, {2}, 1.0, 0);
+  OperandType type0(Type::TENSOR_FLOAT32, {4}, 1.0, 0);
+  OperandType type1(Type::TENSOR_INT32, {1});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_2.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_2.model.cpp
new file mode 100644
index 0000000..abd506e
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_2.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_2.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {2}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {-3};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_3.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_3.model.cpp
new file mode 100644
index 0000000..9fbb74d
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_3.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_3.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {3}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {-5};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_4.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_4.model.cpp
new file mode 100644
index 0000000..49a9c19
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_4.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_4.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {-2};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_5.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_5.model.cpp
new file mode 100644
index 0000000..e91d8ed
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_5.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_5.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {3}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {1};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_6.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_6.model.cpp
new file mode 100644
index 0000000..61daca8
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_6.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_6.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {3}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {4}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {3};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {1};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_7.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_7.model.cpp
new file mode 100644
index 0000000..b45947f
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_7.model.cpp
@@ -0,0 +1,36 @@
+// Generated file (from: strided_slice_quant8_7.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {1});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {3}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type0);
+  // Phase 2, operations
+  static int32_t begins_init[] = {-1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 1);
+  static int32_t ends_init[] = {-4};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 1);
+  static int32_t strides_init[] = {-1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 1);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_8.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_8.model.cpp
new file mode 100644
index 0000000..40554f9
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_8.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_8.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 3}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1, -1};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 2);
+  static int32_t ends_init[] = {2, -4};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 2);
+  static int32_t strides_init[] = {2, -1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 2);
+  static int32_t beginMask_init[] = {0};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/strided_slice_quant8_9.model.cpp b/nn/runtime/test/generated/models/strided_slice_quant8_9.model.cpp
new file mode 100644
index 0000000..6c67d4c
--- /dev/null
+++ b/nn/runtime/test/generated/models/strided_slice_quant8_9.model.cpp
@@ -0,0 +1,37 @@
+// Generated file (from: strided_slice_quant8_9.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::INT32, {});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 1.0, 0);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto begins = model->addOperand(&type1);
+  auto ends = model->addOperand(&type1);
+  auto strides = model->addOperand(&type1);
+  auto beginMask = model->addOperand(&type2);
+  auto endMask = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t begins_init[] = {1, 0};
+  model->setOperandValue(begins, begins_init, sizeof(int32_t) * 2);
+  static int32_t ends_init[] = {2, 2};
+  model->setOperandValue(ends, ends_init, sizeof(int32_t) * 2);
+  static int32_t strides_init[] = {1, 1};
+  model->setOperandValue(strides, strides_init, sizeof(int32_t) * 2);
+  static int32_t beginMask_init[] = {1};
+  model->setOperandValue(beginMask, beginMask_init, sizeof(int32_t) * 1);
+  static int32_t endMask_init[] = {0};
+  model->setOperandValue(endMask, endMask_init, sizeof(int32_t) * 1);
+  model->addOperation(ANEURALNETWORKS_STRIDED_SLICE, {input, begins, ends, strides, beginMask, endMask}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/transpose_float_1.model.cpp b/nn/runtime/test/generated/models/transpose_float_1.model.cpp
new file mode 100644
index 0000000..f6d0d08
--- /dev/null
+++ b/nn/runtime/test/generated/models/transpose_float_1.model.cpp
@@ -0,0 +1,24 @@
+// Generated file (from: transpose_float_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type0(Type::TENSOR_FLOAT32, {2, 3, 4, 5});
+  OperandType type2(Type::TENSOR_FLOAT32, {4, 2, 3, 5});
+  OperandType type1(Type::TENSOR_INT32, {4});
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto perms = model->addOperand(&type1);
+  auto output = model->addOperand(&type2);
+  // Phase 2, operations
+  static int32_t perms_init[] = {2, 0, 1, 3};
+  model->setOperandValue(perms, perms_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_TRANSPOSE, {input, perms}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/nn/runtime/test/generated/models/transpose_quant8_1.model.cpp b/nn/runtime/test/generated/models/transpose_quant8_1.model.cpp
new file mode 100644
index 0000000..808ad2b
--- /dev/null
+++ b/nn/runtime/test/generated/models/transpose_quant8_1.model.cpp
@@ -0,0 +1,24 @@
+// Generated file (from: transpose_quant8_1.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type1(Type::TENSOR_INT32, {4});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 3, 4, 5}, 1.0, 0);
+  OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 2, 3, 5}, 1.0, 0);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto perms = model->addOperand(&type1);
+  auto output = model->addOperand(&type2);
+  // Phase 2, operations
+  static int32_t perms_init[] = {2, 0, 1, 3};
+  model->setOperandValue(perms, perms_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_TRANSPOSE, {input, perms}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}