package pl.edu.amu.wmi.daut.re;
import java.util.ArrayList;
import junit.framework.TestCase;
import pl.edu.amu.wmi.daut.base.NondeterministicAutomatonByThompsonApproach;
import pl.edu.amu.wmi.daut.re.NumericalRangeOperator.Factory;
/**
* Test klasy NumericalRangeOperator.
*/
public class TestNumericalRangeOperator extends TestCase {
/**
* Test konstruktorow NumericalRangeOperator.
*/
public void testNumericalRangeOperator() {
NumericalRangeOperator operator = new NumericalRangeOperator(4, 7);
try {
NumericalRangeOperator operator2 = new NumericalRangeOperator(100, 1);
NumericalRangeOperator operator3 = new NumericalRangeOperator(-1, 4);
NumericalRangeOperator operator4 = new NumericalRangeOperator(5, -10);
fail();
} catch (InvalidValueException e) {
assertTrue(true);
}
}
/**
* Test najprostszego automatu.
*/
public void testcreateSimpleFixedAutomaton() {
NumericalRangeOperator spec = new NumericalRangeOperator(101, 101);
NondeterministicAutomatonByThompsonApproach automaton =
new NondeterministicAutomatonByThompsonApproach(spec.createFixedAutomaton());
assertTrue(automaton.accepts("101"));
assertFalse(automaton.accepts(""));
assertFalse(automaton.accepts("1"));
assertFalse(automaton.accepts("100"));
assertFalse(automaton.accepts("102"));
assertFalse(automaton.accepts("a101b"));
assertFalse(automaton.accepts(" 101 "));
}
/**
* Test ciekawszego automatu.
*/
public final void testcreateFixedAutomaton() {
NumericalRangeOperator spec = new NumericalRangeOperator(3, 88);
NondeterministicAutomatonByThompsonApproach automaton =
new NondeterministicAutomatonByThompsonApproach(spec.createFixedAutomaton());
assertTrue(automaton.accepts("3"));
assertTrue(automaton.accepts("4"));
assertTrue(automaton.accepts("88"));
assertTrue(automaton.accepts("87"));
assertTrue(automaton.accepts("60"));
assertTrue(automaton.accepts("44"));
assertTrue(automaton.accepts("29"));
assertFalse(automaton.accepts(""));
assertFalse(automaton.accepts("2"));
assertFalse(automaton.accepts("89"));
assertFalse(automaton.accepts("100"));
assertFalse(automaton.accepts("0"));
}
/**
* Test automatu od 0 do 13.
*/
public final void testcreateFixedAutomatonFrom0() {
NumericalRangeOperator spec = new NumericalRangeOperator(0, 13);
NondeterministicAutomatonByThompsonApproach automaton =
new NondeterministicAutomatonByThompsonApproach(spec.createFixedAutomaton());
assertTrue(automaton.accepts("0"));
assertTrue(automaton.accepts("1"));
assertTrue(automaton.accepts("13"));
assertTrue(automaton.accepts("12"));
assertTrue(automaton.accepts("10"));
assertTrue(automaton.accepts("5"));
assertTrue(automaton.accepts("7"));
assertFalse(automaton.accepts(""));
assertFalse(automaton.accepts("14"));
assertFalse(automaton.accepts("100"));
assertFalse(automaton.accepts("113"));
assertFalse(automaton.accepts(" 0 "));
}
/**
* Test zakresu od 10 do 11.
*/
public final void testcreateFixedAutomatonFrom10To11() {
NumericalRangeOperator spec = new NumericalRangeOperator(10, 11);
NondeterministicAutomatonByThompsonApproach automaton =
new NondeterministicAutomatonByThompsonApproach(spec.createFixedAutomaton());
assertTrue(automaton.accepts("10"));
assertTrue(automaton.accepts("11"));
assertFalse(automaton.accepts(""));
assertFalse(automaton.accepts("9"));
assertFalse(automaton.accepts("12"));
assertFalse(automaton.accepts("0"));
assertFalse(automaton.accepts(" 10"));
}
/**
* Test fabryki.
*/
public final void testFactory() {
Factory factory = new Factory();
assertEquals(factory.numberOfParams(), 2);
ArrayList<String> params = new ArrayList<String>();
params.add(0, "100");
params.add(1, "200");
assertEquals(factory.createOperator(params).getClass(),
new NumericalRangeOperator(100, 200).getClass());
}
/**
* Test metody toString.
*/
public final void testtoString() {
NumericalRangeOperator spec = new NumericalRangeOperator(0, 10);
String string = spec.toString();
assertEquals(string, "NUMERICAL_FROM_0_TO_10");
}
}