OSDN Git Service

AST2IR の composition 部分の簡単なテストを追加
authorstarg <starg@users.osdn.me>
Tue, 2 Aug 2016 20:02:14 +0000 (05:02 +0900)
committerstarg <starg@users.osdn.me>
Tue, 2 Aug 2016 20:02:14 +0000 (05:02 +0900)
test/CMakeLists.txt
test/ast2ir/CMakeLists.txt [new file with mode: 0644]
test/ast2ir/composition2irtest.cpp [new file with mode: 0644]
test/ast2ir/pch.cpp [new file with mode: 0644]
test/ast2ir/pch.hpp [new file with mode: 0644]

index 0a591ea..7d35ca2 100644 (file)
@@ -5,6 +5,7 @@ endif()
 
 add_definitions(-DBOOST_TEST_MAIN)
 
+add_subdirectory(ast2ir)
 add_subdirectory(binary)
 add_subdirectory(midi)
 add_subdirectory(midiwriter)
diff --git a/test/ast2ir/CMakeLists.txt b/test/ast2ir/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d56d7b4
--- /dev/null
@@ -0,0 +1,7 @@
+
+set(AST2IRTestHeaders
+    ../../include/ast2ir/ast2ir.hpp
+)
+
+yamml_add_test_one(Composition2IRTest composition2irtest.cpp AST2IRTestHeaders)
+target_link_libraries(Composition2IRTest_Exe AST2IR)
diff --git a/test/ast2ir/composition2irtest.cpp b/test/ast2ir/composition2irtest.cpp
new file mode 100644 (file)
index 0000000..b47f080
--- /dev/null
@@ -0,0 +1,61 @@
+
+#include <boost/test/unit_test.hpp>
+
+#include <ast/module.hpp>
+#include <ast2ir/ast2ir.hpp>
+#include <ir/module.hpp>
+
+using namespace YAMML;
+
+BOOST_AUTO_TEST_SUITE(Composition2IRTest)
+
+BOOST_AUTO_TEST_CASE(SimpleCommand1)
+{
+    AST::Module ast;
+    ast.Name = "test.ym1";
+
+    {
+        AST::Composition composition;
+        composition.Name = "MyComposition";
+        composition.Location = {1, 0};
+
+        AST::Command command;
+        command.Name = "program";
+        command.Arguments = std::vector<AST::Literal>{AST::Literal{1L}, AST::Literal{16L}};
+        command.Location = {1, 20};
+
+        composition.Statements.emplace_back(command);
+        ast.Compositions.push_back(composition);
+    }
+
+    AST2IR::AST2IRCompiler compiler;
+    BOOST_REQUIRE(compiler.Compile(ast));
+
+    auto ir = compiler.GetIR().value();
+
+    BOOST_CHECK_EQUAL(ir.Name, "test.ym1");
+    BOOST_CHECK_EQUAL(ir.Blocks.size(), 0);
+    BOOST_CHECK(ir.BlockNameMap.empty());
+    BOOST_CHECK_EQUAL(ir.TrackBlocks.size(), 1);
+
+    auto itTrack = ir.TrackBlockNameMap.find("MyComposition");
+    BOOST_REQUIRE(itTrack != ir.TrackBlockNameMap.end());
+
+    auto trackRef = itTrack->second;
+    BOOST_CHECK_EQUAL(trackRef.ID, 0);
+
+    auto trackBlock = ir.TrackBlocks.at(trackRef.ID);
+    BOOST_REQUIRE_EQUAL(trackBlock.Blocks.size(), 1);
+
+    auto command = boost::get<AST::Command>(trackBlock.Blocks.at(0));
+    BOOST_CHECK_EQUAL(command.Location.Line, 1);
+    BOOST_CHECK_EQUAL(command.Location.Column, 20);
+
+    BOOST_CHECK_EQUAL(command.Name, "program");
+    
+    BOOST_REQUIRE_EQUAL(command.Arguments.size(), 2);
+    BOOST_CHECK_EQUAL(boost::get<long>(command.Arguments.at(0).Value), 1);
+    BOOST_CHECK_EQUAL(boost::get<long>(command.Arguments.at(1).Value), 16);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/ast2ir/pch.cpp b/test/ast2ir/pch.cpp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/ast2ir/pch.hpp b/test/ast2ir/pch.hpp
new file mode 100644 (file)
index 0000000..4f9726c
--- /dev/null
@@ -0,0 +1,17 @@
+
+#pragma once
+
+#include <cassert>
+
+#include <algorithm>
+#include <deque>
+#include <exception>
+#include <functional>
+#include <iterator>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <boost/optional.hpp>
+#include <boost/test/unit_test.hpp>
+#include <boost/variant.hpp>