From ac68db8531966306472501e1df67c3c95e6b78a9 Mon Sep 17 00:00:00 2001 From: Jihoon Lee Date: Mon, 22 Nov 2021 22:16:44 +0900 Subject: [PATCH] [Test] Add multiout realizer test This patch add multiout realizer test **Self evaluation:** 1. Build test: [X]Passed [ ]Failed [ ]Skipped 2. Run test: [X]Passed [ ]Failed [ ]Skipped Signed-off-by: Jihoon Lee --- test/unittest/compiler/unittest_realizer.cpp | 72 ++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 4 deletions(-) diff --git a/test/unittest/compiler/unittest_realizer.cpp b/test/unittest/compiler/unittest_realizer.cpp index a25995a..e945676 100644 --- a/test/unittest/compiler/unittest_realizer.cpp +++ b/test/unittest/compiler/unittest_realizer.cpp @@ -308,9 +308,73 @@ TEST(PreviousInputRealizer, user_not_identifying_first_input_n) { EXPECT_ANY_THROW(realizeAndEqual(r, before, {})); } TEST(MultioutRealizer, multiout_p) { - std::vector before = {}; - std::vector after = {}; + { // source has single output, referred multiple times + std::vector before = { + {"fully_connected", {"name=a"}}, + {"fully_connected", {"name=b", "input_layers=a"}}, + {"fully_connected", {"name=c", "input_layers=a"}}, + {"fully_connected", {"name=d", "input_layers=a"}}, + }; + std::vector after = { + {"fully_connected", {"name=a"}}, + {"multiout", {"name=a/generated_out_0", "input_layers=a"}}, + {"fully_connected", {"name=b", "input_layers=a/generated_out_0(0)"}}, + {"fully_connected", {"name=c", "input_layers=a/generated_out_0(1)"}}, + {"fully_connected", {"name=d", "input_layers=a/generated_out_0(2)"}}, + }; - MultioutRealizer r; - realizeAndEqual(r, before, after); + MultioutRealizer r; + realizeAndEqual(r, before, after); + } + + { // source has single output, all are referred multiple times + std::vector before = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"fully_connected", {"name=b", "input_layers=a"}}, + {"fully_connected", {"name=c", "input_layers=a(0)"}}, + {"fully_connected", {"name=d", "input_layers=a(1)"}}, + {"fully_connected", {"name=e", "input_layers=a(1)"}}, + }; + std::vector after = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"multiout", {"name=a/generated_out_0", "input_layers=a(0)"}}, + {"multiout", {"name=a/generated_out_1", "input_layers=a(1)"}}, + {"fully_connected", {"name=b", "input_layers=a/generated_out_0(0)"}}, + {"fully_connected", {"name=c", "input_layers=a/generated_out_0(1)"}}, + {"fully_connected", {"name=d", "input_layers=a/generated_out_1(0)"}}, + {"fully_connected", {"name=e", "input_layers=a/generated_out_1(1)"}}, + }; + + MultioutRealizer r; + realizeAndEqual(r, before, after); + } + + { // source has single output, some are referred multiple times + std::vector before = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"fully_connected", {"name=b", "input_layers=a(0)"}}, + {"fully_connected", {"name=c", "input_layers=a(0)"}}, + {"fully_connected", {"name=d", "input_layers=a(1)"}}, + }; + std::vector after = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"multiout", {"name=a/generated_out_0", "input_layers=a(0)"}}, + {"fully_connected", {"name=b", "input_layers=a/generated_out_0(0)"}}, + {"fully_connected", {"name=c", "input_layers=a/generated_out_0(1)"}}, + {"fully_connected", {"name=d", "input_layers=a(1)"}}, + }; + + MultioutRealizer r; + realizeAndEqual(r, before, after); + } } + +TEST(MultioutRealizer, multiout_clashing_name_n) { + std::vector before = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"fully_connected", {"name=a", "input_layers=a(0)"}}, + }; + + MultioutRealizer r; + EXPECT_ANY_THROW(realizeAndEqual(r, before, {})); +} \ No newline at end of file -- 2.7.4