Package pl.edu.amu.wmi.daut.re

Source Code of pl.edu.amu.wmi.daut.re.TestConcatenationOperator

package pl.edu.amu.wmi.daut.re;

import pl.edu.amu.wmi.daut.base.AutomatonSpecification;
import pl.edu.amu.wmi.daut.base.NaiveAutomatonSpecification;
import pl.edu.amu.wmi.daut.base.NondeterministicAutomatonByThompsonApproach;
import pl.edu.amu.wmi.daut.base.State;
import pl.edu.amu.wmi.daut.base.CharTransitionLabel;
import junit.framework.TestCase;
import java.util.ArrayList;
import pl.edu.amu.wmi.daut.re.ConcatenationOperator.Factory;

    /**
     * Test klasy ConcatenationOperator.
     */
public class TestConcatenationOperator extends TestCase {
    /**
     * Pierwszy automat akceptuje wyrażenia mające co najmniej jedno "b".
     * Drugi akceptuje słowa z dokładnie dwoma "c" i dowolną ilością "a".
     * Powstały ma akceptować ich konkatenację.
     */
    public final void testCreateAutomatonFromTwoAutomata() {

        AutomatonSpecification a1 = new NaiveAutomatonSpecification();

        State q0 = a1.addState();
        State q1 = a1.addState();
        a1.addTransition(q0, q1, new CharTransitionLabel('b'));
        a1.addLoop(q0, new CharTransitionLabel('a'));
        a1.addLoop(q1, new CharTransitionLabel('b'));
        a1.addLoop(q1, new CharTransitionLabel('a'));

        a1.markAsInitial(q0);
        a1.markAsFinal(q1);

        AutomatonSpecification a2 = new NaiveAutomatonSpecification();

        State q0c = a2.addState();
        State q1c = a2.addState();
        State q2c = a2.addState();
        a2.addTransition(q0c, q1c, new CharTransitionLabel('c'));
        a2.addTransition(q1c, q2c, new CharTransitionLabel('c'));
        a2.addLoop(q0c, new CharTransitionLabel('a'));
        a2.addLoop(q1c, new CharTransitionLabel('a'));
        a2.addLoop(q2c, new CharTransitionLabel('a'));

        a2.markAsInitial(q0c);
        a2.markAsFinal(q2c);

        ConcatenationOperator con = new ConcatenationOperator();
        NondeterministicAutomatonByThompsonApproach result =
        new NondeterministicAutomatonByThompsonApproach(
                con.createAutomatonFromTwoAutomata(a1, a2));

        assertTrue(result.accepts("abbbaaaacc"));
        assertTrue(result.accepts("ababababcaaaaaac"));
        assertTrue(result.accepts("aaaaaaaaaaaabaaaaaacaaaaaacaaaaa"));
        assertTrue(result.accepts("bcc"));
        assertFalse(result.accepts("aabaaba"));
        assertFalse(result.accepts("abbca"));
        assertFalse(result.accepts("aaaacc"));
        assertFalse(result.accepts(""));
        assertFalse(result.accepts("cokolwiek"));
        assertFalse(result.accepts("bbaccab"));
        assertFalse(result.accepts("ccabba"));
    }

     /**
     * Test fabryki operatora.
     */
    public final void testFactory() {
        Factory factory = new Factory();
        ArrayList<String> params = new ArrayList<String>();

        assertEquals(factory.createOperator(params).getClass(),
            new ConcatenationOperator().getClass());
    }
}
TOP

Related Classes of pl.edu.amu.wmi.daut.re.TestConcatenationOperator

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.