Package org.opentripplanner.routing.automata

Source Code of org.opentripplanner.routing.automata.AutomatonTest

/* This program is free software: you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>. */

package org.opentripplanner.routing.automata;

import static org.opentripplanner.routing.automata.Nonterminal.*;
import junit.framework.TestCase;

public class AutomatonTest extends TestCase {

    static final int WALK = 0;
    static final int STATION = 1;
    static final int TRANSIT = 2;
   
    static final int NONTHRU = 0;
    static final int THRU = 1;

    private Nonterminal itinerary;
   
    public void setUp() {
        Nonterminal walkLeg = plus(WALK);
        Nonterminal transitLeg = plus(plus(STATION), plus(TRANSIT), plus(STATION));
        itinerary = seq(walkLeg, star(transitLeg, walkLeg));
    }
   
    public void testAutomata() {
        // NFA nfa = seq(WALK, STATION, choice(TRANSIT, WALK), STATION, WALK).toNFA();
        // NFA nfa = seq(WALK, STATION, star(TRANSIT), STATION, WALK).toNFA();
        // NFA nfa = new NTKleenePlus(new NTTrivial(TRANSIT)).toNFA();
        NFA nfa = itinerary.toNFA();
        DFA dfa = new DFA(nfa);
        testParse(dfa);
        nfa = nfa.reverse().reverse().reverse().reverse();
        dfa = new DFA(nfa);
        testParse(dfa);

        dfa = dfa.minimize();
        testParse(dfa);

        dfa = itinerary.toDFA().minimize();
        testParse(dfa);

        // dfa = seq(star(NONTHRU), star(THRU)).toDFA();
        // System.out.print(dfa.toGraphViz());
        // System.out.print(dfa.dumpTable());
        // testParse(dfa, NONTHRU, NONTHRU, NONTHRU, WALK, WALK, WALK, WALK);

    }

    //this one tests the choice method
    public void testAutomata2() {
        Nonterminal any = choice(WALK,STATION,TRANSIT);
        NFA nfa = choice(star(WALK), seq(star(any), TRANSIT, star(any))).toNFA();
        System.out.print(nfa.toGraphViz());
        DFA dfa = new DFA(nfa);
        testParse(dfa);
        nfa = nfa.reverse().reverse().reverse().reverse();
        dfa = new DFA(nfa);
        testParse(dfa);

        dfa = dfa.minimize();
        testParse(dfa);

    }


    private static void testParse(DFA dfa) {
        testParse(dfa, true, WALK, WALK, WALK, WALK, WALK, WALK, WALK);
        testParse(dfa, true, WALK, STATION, TRANSIT, STATION, WALK, WALK, WALK);
        testParse(dfa, true, WALK, STATION, TRANSIT, STATION, STATION, TRANSIT, STATION, WALK);
        testParse(dfa, false, WALK, WALK, STATION, STATION, STATION, WALK, WALK);
    }

    private static void testParse(DFA dfa, boolean acceptable, int... symbols) {
        boolean accepted = dfa.parse(symbols);
        if (acceptable)
            assertTrue("DFA should accept this input.", accepted);
        else
            assertFalse("DFA should reject this input.", accepted);
    }
}
TOP

Related Classes of org.opentripplanner.routing.automata.AutomatonTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.