summaryrefslogtreecommitdiff
path: root/JPratt/src/test/java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2022-09-27 19:18:09 -0400
committerBen Culkin <scorpress@gmail.com>2022-09-27 19:18:09 -0400
commit02af075e89fbdeb22575f235a3acb2607e0b4edf (patch)
treebf31e1157732b1c421522301cf4d2a8ee7f4e3fb /JPratt/src/test/java
parentcea3e47938322b97c318dea38dc0d649e196dc1b (diff)
Minor changes
Diffstat (limited to 'JPratt/src/test/java')
-rw-r--r--JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java58
-rw-r--r--JPratt/src/test/java/bjc/test/pratt/TestUtils.java15
-rw-r--r--JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java39
3 files changed, 112 insertions, 0 deletions
diff --git a/JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java b/JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java
new file mode 100644
index 0000000..608a137
--- /dev/null
+++ b/JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java
@@ -0,0 +1,58 @@
+package bjc.test.pratt;
+
+import static org.junit.Assert.*;
+import static bjc.test.pratt.TestUtils.*;
+
+import java.util.Iterator;
+
+import org.junit.Test;
+
+import bjc.data.ArrayIterator;
+import bjc.data.SimpleTree;
+import bjc.data.Tree;
+import bjc.pratt.PrattParser;
+import bjc.pratt.commands.CommandResult;
+import bjc.pratt.commands.impls.InitialCommands;
+import bjc.pratt.commands.impls.NonInitialCommands;
+import bjc.pratt.tokens.StringTokenStream;
+import bjc.pratt.tokens.Token;
+import bjc.utils.parserutils.ParserException;
+
+@SuppressWarnings("javadoc")
+public class PrattParserTest {
+
+ @Test
+ public void test() {
+ Iterator<Token<String, String>> iter = new ArrayIterator<>(token("(int)", "1"), token("+"),
+ token("(int)", "2"));
+ StringTokenStream tokens = new StringTokenStream(iter);
+
+ PrattParser<String, String, TestState> parser = new PrattParser<>();
+
+ parser.addInitialCommand("(int)", InitialCommands.leaf());
+ parser.addNonInitialCommand("+", NonInitialCommands.infixLeft(1));
+
+ try {
+ TestState state = new TestState();
+
+ tokens.mark();
+ CommandResult<String, String> result = parser.parseExpression(0, tokens, state, false);
+ tokens.rollback();
+
+ assertEquals(CommandResult.Status.SUCCESS, result.status);
+ Tree<Token<String, String>> actualTree = result.success();
+
+ Tree<Token<String, String>> expectedTree = new SimpleTree<>(token("+"),
+ new SimpleTree<>(token("(int)", "1")), new SimpleTree<>(token("(int)", "2")));
+
+ assertEquals(expectedTree, actualTree);
+ } catch (ParserException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
+
+class TestState {
+
+}
diff --git a/JPratt/src/test/java/bjc/test/pratt/TestUtils.java b/JPratt/src/test/java/bjc/test/pratt/TestUtils.java
new file mode 100644
index 0000000..a32349f
--- /dev/null
+++ b/JPratt/src/test/java/bjc/test/pratt/TestUtils.java
@@ -0,0 +1,15 @@
+package bjc.test.pratt;
+
+import bjc.pratt.tokens.StringToken;
+import bjc.pratt.tokens.Token;
+
+public class TestUtils {
+
+ public static Token<String, String> token(String val) {
+ return token(val, val);
+ }
+
+ public static Token<String, String> token(String key, String val) {
+ return new StringToken(key, val);
+ }
+}
diff --git a/JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java b/JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java
new file mode 100644
index 0000000..5bacac7
--- /dev/null
+++ b/JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java
@@ -0,0 +1,39 @@
+package bjc.test.pratt.tokens;
+
+import static org.junit.Assert.*;
+import static bjc.test.pratt.TestUtils.*;
+
+import java.util.Iterator;
+
+import org.junit.Test;
+
+import bjc.data.ArrayIterator;
+import bjc.pratt.tokens.StringTokenStream;
+import bjc.pratt.tokens.Token;
+
+@SuppressWarnings("javadoc")
+public class StringTokenStreamTest {
+
+ @Test
+ public void test() {
+ Token<String, String> tokenA = token("a");
+ Token<String, String> tokenB = token("b");
+ Token<String, String> tokenC = token("c");
+ Token<String, String> tokenD = token("d");
+
+ Iterator<Token<String, String>> itr = new ArrayIterator<>(tokenA, tokenB, tokenC, tokenD);
+ StringTokenStream strm = new StringTokenStream(itr);
+
+ assertNull(strm.current());
+ assertEquals(tokenA, strm.next());
+ assertEquals(tokenB, strm.next());
+ strm.mark();
+ assertEquals(tokenC, strm.next());
+ assertEquals(tokenD, strm.next());
+ strm.rollback();
+ assertEquals(tokenC, strm.next());
+ assertEquals(tokenD, strm.next());
+ assertEquals(token("(end)"), strm.next());
+ }
+
+}