/* * (C) Copyright 2005 Arnaud Bailly (arnaud.oqube@gmail.com), * Yves Roos (yroos@lifl.fr) and others. * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package rationals; import java.util.Iterator; import java.util.Set; import junit.framework.TestCase; import rationals.transformations.EpsilonTransitionRemover; import rationals.transformations.Reducer; /** * @version $Id: EpsilonRemoverTest.java 2 2006-08-24 14:41:48Z oqube $ */ public class EpsilonRemoverTest extends TestCase { /** * Constructor for EspilonRemoverTest. * * @param arg0 */ public EpsilonRemoverTest(String arg0) { super(arg0); } public void testEpsilon() throws NoSuchStateException { Automaton<String, Transition<String>, TransitionBuilder<String>> a = new Automaton<>(); State s1 = a.addState(true, false); State s2 = a.addState(false, false); State s3 = a.addState(false, true); a.addTransition(new Transition<String>(s1, null, s1)); a.addTransition(new Transition<String>(s1, "a", s2)); a.addTransition(new Transition<String>(s2, null, s3)); a.addTransition(new Transition<String>(s3, null, s1)); a.addTransition(new Transition<String>(s3, "b", s3)); Automaton<String, Transition<String>, TransitionBuilder<String>> b = new EpsilonTransitionRemover<String, Transition<String>, TransitionBuilder<String>>().transform(a); assertTrue(!b.alphabet().contains(null)); /* check there is no transition with null labels */ Set<Transition<String>> s = b.delta(); assertNoEpsilon(s); b = new Reducer<String, Transition<String>, TransitionBuilder<String>>().transform(b); System.err.println(b); } public void testEpsilon2() throws NoSuchStateException { Automaton<String, Transition<String>, TransitionBuilder<String>> a = new Automaton<>(); State s1 = a.addState(true, false); State s2 = a.addState(false, false); State s3 = a.addState(false, true); a.addTransition(new Transition<String>(s1, null, s2)); a.addTransition(new Transition<String>(s1, "a", s2)); a.addTransition(new Transition<String>(s2, "a", s3)); a.addTransition(new Transition<String>(s3, null, s2)); Automaton<String, Transition<String>, TransitionBuilder<String>> b = new EpsilonTransitionRemover<String, Transition<String>, TransitionBuilder<String>>().transform(a); assertTrue(!b.alphabet().contains(null)); /* check there is no transition with null labels */ Set<Transition<String>> s = b.delta(); assertNoEpsilon(s); b = new Reducer<String, Transition<String>, TransitionBuilder<String>>().transform(b); System.err.println(b); } public void testEpsilon3() throws NoSuchStateException { Automaton<String, Transition<String>, TransitionBuilder<String>> a = new Automaton<>(); State s1 = a.addState(true, false); State s2 = a.addState(false, false); State s3 = a.addState(false, true); a.addTransition(new Transition<>(s1, "a", s2)); a.addTransition(new Transition<String>(s2, null, s3)); Automaton<String, Transition<String>, TransitionBuilder<String>> b = new EpsilonTransitionRemover<String, Transition<String>, TransitionBuilder<String>>().transform(a); assertTrue(!b.alphabet().contains(null)); /* check there is no transition with null labels */ Set<Transition<String>> s = b.delta(); assertNoEpsilon(s); b = new Reducer<String, Transition<String>, TransitionBuilder<String>>().transform(b); System.err.println(b); } /** * @param s */ private void assertNoEpsilon(Set<Transition<String>> s) { for (Iterator<Transition<String>> i = s.iterator(); i.hasNext();) { Transition<String> tr = i.next(); assertTrue("Transition " + tr + " labelled with epsilon", tr.label() != null); } } }