summaryrefslogtreecommitdiffhomepage
path: root/tests/test-cpp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-cpp.cpp')
-rw-r--r--tests/test-cpp.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/test-cpp.cpp b/tests/test-cpp.cpp
new file mode 100644
index 0000000..513a3a5
--- /dev/null
+++ b/tests/test-cpp.cpp
@@ -0,0 +1,78 @@
+#include "bnf.h"
+#include "cpp.h"
+#include "cppbnf.h"
+#include "lexer.h"
+#include "grammer.h"
+#include "minicc.h"
+#include "debug.h"
+
+#include <boost/algorithm/string.hpp>
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+#include <algorithm>
+#include <cctype>
+#include <deque>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+class CppTest: public ::testing::Test
+{
+protected:
+ CppTest() {
+ debug = true;
+ }
+ ~CppTest() {
+ }
+};
+
+TEST_F(CppTest, preprocessing_tokenize) {
+ CPP cpp;
+ auto pp_tokens = cpp.preprocessing_tokenize("int main() { return 1; }");
+
+ ASSERT_EQ(pp_tokens.size(), 9);
+
+ auto tokens = cpp.tokens_from_pptokens(pp_tokens);
+
+ ASSERT_EQ(tokens.size(), 9);
+
+ auto nodes = cpp.analysis(tokens);
+
+ ASSERT_EQ(nodes.size(), 60/*44*/);
+}
+
+TEST_F(CppTest, preprocessing_tokenize_compile_error) {
+ CPP cpp;
+ auto ppTree = cpp.preprocessing_tokenize("in ma");
+
+ auto tokens = cpp.tokens_from_pptokens(ppTree);
+
+ ASSERT_EQ(tokens.size(), 2);
+
+ try {
+ auto nodes = cpp.analysis(tokens);
+ } catch (const std::exception& ex) {
+ EXPECT_EQ(ex.what(), "Compile error"s);
+ return;
+ }
+
+ FAIL() << "Exception expected";
+}
+
+TEST(Cpp, compile) {
+ CPP cpp;
+
+ cpp.compile("int main() { return 1 + 1; }");
+}
+
+TEST(Cpp, compile_2_times) {
+ CPP cpp;
+
+ cpp.compile("int main() { return (1 + 2) * 2; }");
+ cpp.compile("int main() { return 1 + 2 * 2; }");
+}
+