package project.scangen.tokenizer.test; import project.nfa.NFA; import project.nfa.NFAUtil; import project.nfa.State; import project.nfa.Transition; import org.junit.Test; import project.scangen.tokenizer.Token; import project.scangen.tokenizer.Tokenizer; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.Iterator; import static project.nfa.NFAUtil.*; import static org.junit.Assert.assertTrue; public class TokenizerTest { @Test public void FactoryMethodTests() { // a(a|b)*b State a = State.createState("a", false); State b = State.createState("b", false); State c = State.createState("c", true); a.addTransition(Transition.createTransition("a", b)); b.addTransition(Transition.createTransition("a", b), Transition.createTransition("b", c)); c.addTransition(Transition.createTransition("a", b), Transition.createTransition("b", c)); NFA n = NFA.createNFA(a); // // n.addState(a, b, c); assertTrue("a(a|b)*b should be a DFA", n.isDFA()); assertTrue( "a(a|b)*b", NFAUtil.isValid(n, "ab") && NFAUtil.isValid(n, "abababab") && NFAUtil.isValid(n, "aabababababbaabbaab") && NFAUtil.isValid(n, "ababb") && NFAUtil.isValid(n, "abbbbbbaaaaaaaabbbbbb") && !NFAUtil.isValid(n, "bbbbaaaa") && !NFAUtil.isValid(n, "aaaabbbbbbbbba")); String s = "aabababbbb abb baaba ab aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; InputStream input = new ByteArrayInputStream(s.getBytes()); Tokenizer tokenizer = new Tokenizer(n, input); Iterator<Token> tokenIterator = tokenizer.iterator(); // Not sure what it supposed to be tested here for (int i = 0; i < 6; ++i) { tokenIterator.next(); } // ab+c NFASegment d = ab(ab(a("a"), aPlus(a("b"))), a("c")); d.end.addTransition(Transition.spawnGoal("Valid")); NFA nyet = new NFA(d.start); nyet = NFAUtil.convertToDFA(nyet); s = "abbc abbc\nabbc\n abbc"; input = new ByteArrayInputStream(s.getBytes()); tokenizer = new Tokenizer(nyet, input); tokenIterator = tokenizer.iterator(); Token latest; do { latest = tokenIterator.next(); System.out.println(latest); } while (latest != null); } }