diff --git a/tests/lr0_shift-red.cpp b/tests/lr0_shift-red.cpp
index 401fdae..08a2423 100644
--- a/tests/lr0_shift-red.cpp
+++ b/tests/lr0_shift-red.cpp
@@ -15,42 +15,50 @@ TEST(lr0, test0) {
 
 
 	pds::Grammar grammar;
-	grammar.start = "S'";
-	grammar.variables = {"S'","S","A","E"};
-	grammar.terminals = {"$",";", "id", ":=", "+"};
+	grammar.start = "S";
+	grammar.variables = {"S","A","E"};
+	grammar.terminals = {";", "id", ":=", "+"};
 
     std::shared_ptr<pds::Rule> rule(new pds::Rule());
-	rule->head = "S'";
-	rule->tail = {"S","$"};
-    grammar.rules.push_back(rule);
-
     rule->head = "S";
     rule->tail = {"S",";","A"};
-    grammar.rules.push_back(rule);
+    grammar.rules.push_back(std::make_shared<pds::Rule>(*rule));
 
     rule->head = "S";
     rule->tail = {"A"};
-    grammar.rules.push_back(rule);
+    grammar.rules.push_back(std::make_shared<pds::Rule>(*rule));
 
     rule->head = "A";
     rule->tail = {"E"};
-    grammar.rules.push_back(rule);
+    grammar.rules.push_back(std::make_shared<pds::Rule>(*rule));
 
     rule->head = "A";
     rule->tail = {"id",":=","E"};
-    grammar.rules.push_back(rule);
+    grammar.rules.push_back(std::make_shared<pds::Rule>(*rule));
 
     rule->head = "E";
     rule->tail = {"E","+","id"};
-    grammar.rules.push_back(rule);
+    grammar.rules.push_back(std::make_shared<pds::Rule>(*rule));
 
     rule->head = "E";
     rule->tail = {"id"};
-    grammar.rules.push_back(rule);
+    grammar.rules.push_back(std::make_shared<pds::Rule>(*rule));
 	
 	
-	pds::lr::Generator<pds::lr::SLR1Itemset> g(grammar);
-	auto tbl = g.generate(); // LRTable
+    {
+        pds::lr::Generator<pds::lr::LR0Itemset> g(grammar);
+        ASSERT_THROW(g.generate(), std::runtime_error);
+        try {
+            g.generate();
+        } catch (std::runtime_error& e) {
+            ASSERT_EQ(std::string("shift-reduce"), e.what());
+        }
+    }
+    {
+        pds::lr::Generator<pds::lr::SLR1Itemset> g(grammar);
+        ASSERT_NO_THROW(g.generate());
+    }
+	// auto tbl = g.generate(); // LRTable
 	
 	// EXPECT_THROW(throw "shift-reduce", std::exception);
     /*