1 package io.github.reggert.reb4j; 2 3 import static org.hamcrest.CoreMatchers.is; 4 import static org.junit.Assert.assertThat; 5 6 import io.github.reggert.reb4j.CharLiteral; 7 import io.github.reggert.reb4j.Expression; 8 import io.github.reggert.reb4j.Literal; 9 import io.github.reggert.reb4j.Sequence; 10 11 import java.util.HashSet; 12 13 import org.junit.Test; 14 15 16 17 public class SequenceTest 18 { 19 20 @Test 21 public void testSequence() 22 { 23 final CharLiteral a = Literal.literal('a'); 24 final CharLiteral b = Literal.literal('b'); 25 final CharLiteral c = Literal.literal('c'); 26 final CharLiteral d = Literal.literal('d'); 27 final CharLiteral e = Literal.literal('e'); 28 final CharLiteral f = Literal.literal('f'); 29 final Sequence ab = a.andThen(b); 30 final Sequence abc = ab.andThen(c); 31 final Sequence ef = e.andThen(f); 32 final Sequence def = d.andThen(ef); 33 final Sequence abcdef = abc.andThen(def); 34 35 assertThat(ab.toPattern().pattern(), is("ab")); 36 assertThat(abc.toPattern().pattern(), is("abc")); 37 assertThat(ef.toPattern().pattern(), is("ef")); 38 assertThat(def.toPattern().pattern(), is("def")); 39 assertThat(abcdef.toPattern().pattern(), is("abcdef")); 40 } 41 42 @Test 43 public void testSequenceHashcodeEquals() 44 { 45 final CharLiteral a = Literal.literal('a'); 46 final CharLiteral b = Literal.literal('b'); 47 final CharLiteral c = Literal.literal('c'); 48 49 final Sequence ab = a.andThen(b); 50 final Sequence abc1 = ab.andThen(c); 51 final Sequence abc2 = Sequence.sequence(a, b, c); 52 final HashSet<Expression> expressions = new HashSet<Expression>(); 53 expressions.add(a); 54 expressions.add(b); 55 expressions.add(c); 56 expressions.add(abc1); 57 assertThat(expressions.size(), is(4)); 58 assertThat(expressions.contains(abc1), is(true)); 59 assertThat(expressions.contains(abc2), is(true)); 60 assertThat(expressions.contains(ab), is(false)); 61 assertThat(abc1.equals(abc1), is(true)); 62 assertThat(abc1.equals(abc2), is(true)); 63 assertThat(abc1.equals(a), is(false)); 64 assertThat(abc1.equals(null), is(false)); 65 } 66 67 }