[nnc] Fix ModelAnalyzer.linearization test (#8291)
authorSergei Barannikov/Engineer/AI Tools Lab /SRR/Samsung Electronics <s.barannikov@samsung.com>
Thu, 17 Oct 2019 15:22:00 +0000 (18:22 +0300)
committerAlexander Efimov/./AI Tools Lab/Samsung Electronics <a.efimov@samsung.com>
Thu, 17 Oct 2019 15:22:00 +0000 (18:22 +0300)
The test relied on specific order of graph traversal.

Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
compiler/nnc/unittests/soft_backend/ModelAnalyzer.cpp

index 9718a1e..0413011 100644 (file)
@@ -57,7 +57,7 @@ TEST(ModelAnalyzer, linearization)
   Operation *head2 = g.create<ops::ReluOp>(input->getOutput(0));
   Operation *tail1 = g.create<ops::ReluOp>(head1->getOutput(0));
   Operation *tail2 = g.create<ops::ReluOp>(head2->getOutput(0));
-  std::vector<mir::Operation::Output *> concat_inputs{tail1->getOutput(0), tail2->getOutput(0)};
+  vector<mir::Operation::Output *> concat_inputs{tail1->getOutput(0), tail2->getOutput(0)};
   Operation *join = g.create<ops::ConcatOp>(concat_inputs, 0);
   input->getOutput(0)->setName("input");
   head1->getOutput(0)->setName("head1");
@@ -71,11 +71,12 @@ TEST(ModelAnalyzer, linearization)
   ma.analyze(&g);
   const auto &seq = ma.getInferenceSequence();
   ASSERT_EQ(seq.size(), 6u);
-  auto it = seq.begin();
-  ASSERT_EQ(getCall(*(it++))->mirOp, input);
-  ASSERT_EQ(getCall(*(it++))->mirOp, head1);
-  ASSERT_EQ(getCall(*(it++))->mirOp, tail1);
-  ASSERT_EQ(getCall(*(it++))->mirOp, head2);
-  ASSERT_EQ(getCall(*(it++))->mirOp, tail2);
-  ASSERT_EQ(getCall(*(it++))->mirOp, join);
+
+  vector<Operation *> op_seq(seq.size());
+  transform(seq.cbegin(), seq.cend(), op_seq.begin(),
+            [](const unique_ptr<sir::Action> &action) { return getCall(action)->mirOp; });
+
+  vector<Operation *> valid_seq1{input, head1, tail1, head2, tail2, join};
+  vector<Operation *> valid_seq2{input, head2, tail2, head1, tail1, join};
+  ASSERT_TRUE(op_seq == valid_seq1 || op_seq == valid_seq2);
 }