/* * (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.transductions; import java.util.Map; import java.util.Set; import junit.framework.TestCase; import rationals.NoSuchStateException; import rationals.State; import rationals.Transition; /** * @author nono * @version $Id: DeterministicTransducerTest.java 2 2006-08-24 14:41:48Z oqube $ */ public class DeterministicTransducerTest extends TestCase { /** * @param arg0 */ public DeterministicTransducerTest(String arg0) { super(arg0); } /* * example from "A new technique for generating protocol tests", Sabnani and * Dahbura, 1985 */ public void testUIO() throws NoSuchStateException, TransductionException { DeterministicTransducer t = new DeterministicTransducer(); State[] ss = new State[7]; ss[0] = t.addState(true, false); for (int i = 1; i < 7; i++) ss[i] = t.addState(false, true); t.addTransition(new Transition(ss[0], new TransducerRelation("a", "b"), ss[1])); t.addTransition(new Transition(ss[1], new TransducerRelation("c", "d"), ss[2])); t.addTransition(new Transition(ss[2], new TransducerRelation("z", "b"), ss[4])); t.addTransition(new Transition(ss[4], new TransducerRelation("a", "b"), ss[0])); t.addTransition(new Transition(ss[1], new TransducerRelation("a", "f"), ss[3])); t.addTransition(new Transition(ss[3], new TransducerRelation("z", "b"), ss[5])); t.addTransition(new Transition(ss[5], new TransducerRelation("x", "d"), ss[6])); t.addTransition(new Transition(ss[6], new TransducerRelation("a", "f"), ss[1])); Map m = t.makeUIOSet(); System.err.println("UIO Set "+m); assertTrue(t.verifyUIO(m)); } /* * example from "An optimization technique for protocole conformance test * generation based on UIO sequences and rural chinese postman tour", Aho, * Dahbura, Lee and Uyar, 1991 */ public void testUIO2() throws NoSuchStateException, TransductionException { DeterministicTransducer t = new DeterministicTransducer(); State[] ss = new State[5]; for (int i = 0; i < 5; i++) ss[i] = t.addState(i == 0 ? true : false, true); t.addTransition(new Transition(ss[0], new TransducerRelation("a", "x"), ss[0])); t.addTransition(new Transition(ss[0], new TransducerRelation("b", "x"), ss[1])); t.addTransition(new Transition(ss[0], new TransducerRelation("c", "y"), ss[3])); t.addTransition(new Transition(ss[1], new TransducerRelation("b", "y"), ss[2])); t.addTransition(new Transition(ss[1], new TransducerRelation("a", "x"), ss[4])); t.addTransition(new Transition(ss[2], new TransducerRelation("b", "x"), ss[4])); t.addTransition(new Transition(ss[2], new TransducerRelation("c", "y"), ss[4])); t.addTransition(new Transition(ss[3], new TransducerRelation("b", "x"), ss[2])); t.addTransition(new Transition(ss[3], new TransducerRelation("a", "x"), ss[4])); t.addTransition(new Transition(ss[4], new TransducerRelation("a", "z"), ss[3])); t.addTransition(new Transition(ss[4],new TransducerRelation( "c", "z"), ss[0])); Map m = t.makeUIOSet(); assertTrue(t.verifyUIO(m)); } /* * example from <p> " <em> Test selection based on finite state models </em> ", * Fujiwara, Bochmann, Khendek, Amalou and Ghedamsi, IEEE TSE 17(6) 1991 */ public void testW() throws NoSuchStateException { DeterministicTransducer t = new DeterministicTransducer(); State[] ss = new State[3]; for (int i = 0; i < 3; i++) ss[i] = t.addState(i == 0 ? true : false, true); t.addTransition(new Transition(ss[0], new TransducerRelation("a", "e"), ss[1])); t.addTransition(new Transition(ss[0], new TransducerRelation("c", "e"), ss[2])); t.addTransition(new Transition(ss[0], new TransducerRelation("b", "f"), ss[1])); t.addTransition(new Transition(ss[1], new TransducerRelation("a", "f"), ss[0])); t.addTransition(new Transition(ss[1], new TransducerRelation("b", "f"), ss[2])); t.addTransition(new Transition(ss[1], new TransducerRelation("c", "f"), ss[1])); t.addTransition(new Transition(ss[2], new TransducerRelation("a", "f"), ss[2])); t.addTransition(new Transition(ss[2], new TransducerRelation("b", "e"), ss[0])); t.addTransition(new Transition(ss[2], new TransducerRelation("c", "e"), ss[1])); Set s = t.makeCharacterizingSet(); System.err.println("W Set "+s); assertTrue(t.verifyW(s)); } /* * example from <p> " <em> Formal Methods for protocol testing </em> ", * Sidhu and Leung, IEEE TSE 15(4) 1989 * */ public void testW2() throws NoSuchStateException, TransductionException { DeterministicTransducer t = new DeterministicTransducer(); State[] ss = new State[5]; for (int i = 0; i < 5; i++) ss[i] = t.addState(i == 0 ? true : false, true); t.addTransition(new Transition(ss[0], new TransducerRelation("b", null), ss[0])); t.addTransition(new Transition(ss[0], new TransducerRelation("a", "x"), ss[3])); t.addTransition(new Transition(ss[1], new TransducerRelation("b", "y"), ss[2])); t.addTransition(new Transition(ss[1], new TransducerRelation("a", "y"), ss[4])); t.addTransition(new Transition(ss[2], new TransducerRelation("b", "x"), ss[3])); t.addTransition(new Transition(ss[2], new TransducerRelation("a", "x"), ss[1])); t.addTransition(new Transition(ss[3], new TransducerRelation("b", "y"), ss[3])); t.addTransition(new Transition(ss[3], new TransducerRelation("a", "x"), ss[4])); t.addTransition(new Transition(ss[4], new TransducerRelation("b", "y"), ss[0])); t.addTransition(new Transition(ss[4], new TransducerRelation("a", "y"), ss[2])); Set s = t.makeCharacterizingSet(); System.err.println("W Set "+s); /* verify W */ assertTrue(t.verifyW(s)); } }