2121import org .junit .Before ;
2222import org .junit .Test ;
2323
24+ import java .util .ArrayList ;
25+ import java .util .Arrays ;
26+ import java .util .Collections ;
27+ import java .util .List ;
28+
2429/**
2530 * Tests for class {@link WildcardTrie}
2631 *
2934 */
3035public final class WildcardTrieTest {
3136
37+ private static final String AABB = "aabb" ;
38+ private static final String AACBB = "aacbb" ;
39+ private static final String AB = "ab" ;
40+ private static final String ABBC = "abbc" ;
3241 private static final String ABC = "abc" ;
42+ private static final String ACB = "acb" ;
3343 private static final String CCB = "ccb" ;
44+ private static final String EMPTY = "" ;
45+ private static final String X = "x" ;
46+ private static final List <String > ALL = List .of (AABB , AACBB , AB , ABBC , ABC , ACB , CCB , EMPTY , X );
47+
3448 private static final String AAQBB = "aa?bb" ;
49+ private static final String AA_STAR_BB = "aa*bb" ;
50+ private static final String A_STAR = "a*" ;
3551 private static final String A_STAR_B = "a*b" ;
3652 private static final String A_STAR_BC = "a*bc" ;
37- private static final String AA_STAR_BB = "aa*bb" ;
3853 private static final String STAR_B = "*b" ;
39- private static final String A_STAR = "a*" ;
40- private static final String AACBB = "aacbb" ;
41- private static final String AABB = "aabb" ;
42- private static final String AB = "ab" ;
54+
4355 private static final String NOT_FOUND_BY = " not found by " ;
4456 private static final String FOUND_BY = " found by " ;
4557
@@ -54,121 +66,95 @@ public void createSystemUnderTest() {
5466 }
5567
5668 @ Test
57- public void testWithQWildcard () {
58- Assert .assertTrue (trie .get ("" ).isEmpty ());
59- Assert .assertTrue (trie .get ("x" ).isEmpty ());
60-
61- trie .put (ABC , ABC );
62- Assert .assertTrue (trie .get (ABC ).contains (ABC ));
63-
64- trie .put (AAQBB , AAQBB );
65- Assert .assertTrue (trie .get (AACBB ).contains (AAQBB ));
66- Assert .assertTrue (trie .get (AABB ).isEmpty ());
67-
68- trie .put (AABB , AABB );
69- Assert .assertTrue (trie .get (AABB ).contains (AABB ));
70- Assert .assertTrue (trie .get (AABB ).size () == 1 );
69+ public void testEmptyTrie () {
70+ assertTrie (null );
71+ }
7172
72- trie .put (AACBB , AACBB );
73- Assert .assertTrue (trie .get (AACBB ).contains (AACBB ));
74- Assert .assertTrue (trie .get (AACBB ).contains (AAQBB ));
73+ @ Test
74+ public void testWithQWildcard () {
75+ assertList (ABC , ABC );
76+ assertTrie (AAQBB , AACBB );
77+ assertList (AABB , AABB );
78+ assertList (AACBB , AAQBB , AACBB );
7579 }
7680
7781 @ Test
7882 public void testWithStarWildcard () {
79- trie .put (A_STAR_B , A_STAR_B );
80- Assert .assertTrue (AACBB + NOT_FOUND_BY + A_STAR_B , trie .get (AACBB ).contains (A_STAR_B ));
81- Assert .assertTrue (AABB + NOT_FOUND_BY + A_STAR_B , trie .get (AABB ).contains (A_STAR_B ));
82- Assert .assertTrue (AB + NOT_FOUND_BY + A_STAR_B , trie .get (AB ).contains (A_STAR_B ));
83- Assert .assertTrue (ABC + FOUND_BY + A_STAR_B , trie .get (ABC ).isEmpty ());
84- Assert .assertTrue (CCB + FOUND_BY + A_STAR_B , trie .get (CCB ).isEmpty ());
85-
86- trie .put (AABB , AABB );
87- Assert .assertTrue (trie .get (AABB ).contains (AABB ));
88- Assert .assertEquals (2 , trie .get (AABB ).size ());
89-
90- trie .put (AACBB , AACBB );
91- Assert .assertTrue (trie .get (AACBB ).contains (AACBB ));
92- Assert .assertTrue (trie .get (AACBB ).contains (A_STAR_B ));
83+ assertTrie (A_STAR_B , AABB , AACBB , AB , ACB );
84+ assertList (AABB , A_STAR_B , AABB );
85+ assertList (AACBB , A_STAR_B , AACBB );
9386 }
9487
9588 @ Test
9689 public void testWithTrailingStarWildcard () {
97- trie .put (A_STAR , A_STAR );
98- Assert .assertTrue (AACBB + NOT_FOUND_BY + A_STAR , trie .get (AACBB ).contains (A_STAR ));
99- Assert .assertTrue (AABB + NOT_FOUND_BY + A_STAR , trie .get (AABB ).contains (A_STAR ));
100- Assert .assertTrue (AB + NOT_FOUND_BY + A_STAR , trie .get (AB ).contains (A_STAR ));
101- Assert .assertTrue (ABC + NOT_FOUND_BY + A_STAR_B , trie .get (ABC ).contains (A_STAR ));
102- Assert .assertTrue (CCB + FOUND_BY + A_STAR_B , trie .get (CCB ).isEmpty ());
103-
104- trie .put (AABB , AABB );
105- Assert .assertTrue (trie .get (AABB ).contains (AABB ));
106- Assert .assertEquals (2 , trie .get (AABB ).size ());
107-
108- trie .put (AACBB , AACBB );
109- Assert .assertTrue (trie .get (AACBB ).contains (AACBB ));
110- Assert .assertTrue (trie .get (AACBB ).contains (A_STAR ));
90+ assertTrie (A_STAR , AABB , AACBB , AB , ABBC , ABC , ACB );
91+ assertList (AABB , A_STAR , AABB );
92+ assertList (AACBB , A_STAR , AACBB );
11193 }
11294
11395 @ Test
11496 public void testWithInitialStarWildcard () {
115- trie .put (STAR_B , STAR_B );
116- Assert .assertTrue (AACBB + NOT_FOUND_BY + STAR_B , trie .get (AACBB ).contains (STAR_B ));
117- Assert .assertTrue (AABB + NOT_FOUND_BY + STAR_B , trie .get (AABB ).contains (STAR_B ));
118-
119- Assert .assertTrue (ABC + FOUND_BY + A_STAR_B , trie .get (ABC ).isEmpty ());
120- Assert .assertTrue (CCB + NOT_FOUND_BY + A_STAR_B , trie .get (CCB ).contains (STAR_B ));
121-
122- trie .put (AABB , AABB );
123- Assert .assertTrue (trie .get (AABB ).contains (AABB ));
124- Assert .assertEquals (2 , trie .get (AABB ).size ());
125-
126- trie .put (AACBB , AACBB );
127- Assert .assertTrue (trie .get (AACBB ).contains (AACBB ));
128- Assert .assertTrue (trie .get (AACBB ).contains (STAR_B ));
97+ assertTrie (STAR_B , AABB , AACBB , AB , ACB , CCB );
98+ assertList (AABB , STAR_B , AABB );
99+ assertList (AACBB , STAR_B , AACBB );
129100 }
130101
131102 @ Test
132103 public void testWithMultipleStarWildcards () {
133- trie .put (STAR_B , STAR_B );
134- trie .put (A_STAR , A_STAR );
135- trie .put (A_STAR_B , A_STAR_B );
136-
137- Assert .assertEquals (3 , trie .get (AACBB ).size ());
104+ assertTrie (STAR_B , AABB , AACBB , AB , ACB , CCB );
105+ assertTrie (A_STAR , AABB , AACBB , AB , ABC , ABBC , ACB );
106+ assertTrie (A_STAR_B , AABB , AACBB , AB , ACB );
107+ assertList (AACBB , STAR_B , A_STAR , A_STAR_B , AACBB );
138108
139- trie . put (AA_STAR_BB , AA_STAR_BB );
140- Assert . assertEquals ( 4 , trie . get ( AACBB ). size () );
109+ assertTrie (AA_STAR_BB , AABB , AACBB );
110+ assertList ( AACBB , STAR_B , A_STAR , A_STAR_B , AA_STAR_BB , AACBB );
141111
142- Assert .assertEquals (3 , trie .get (AB ).size ());
143- Assert .assertEquals (1 , trie .get (CCB ).size ());
144-
145- Assert .assertEquals (3 , trie .get ("acb" ).size ());
112+ assertList (AB , STAR_B , A_STAR , A_STAR_B , AB );
113+ assertList (ACB , STAR_B , A_STAR , A_STAR_B , ACB );
114+ assertList (CCB , STAR_B , CCB );
146115 }
147116
148117 @ Test
149118 public void testOverlapWithWildcard () {
150- trie .put (ABC , ABC );
151- trie .put (A_STAR_BC , A_STAR_BC );
152-
153- Assert .assertEquals (2 , trie .get (ABC ).size ());
154- Assert .assertEquals (1 , trie .get ("abbc" ).size ());
119+ assertTrie (A_STAR_BC , ABBC , ABC );
120+ assertList (ABC , A_STAR_BC , ABC );
121+ assertList (ABBC , A_STAR_BC , ABBC );
155122 }
156123
157124 @ Test
158125 public void testEmptyKey () {
159- trie .put ("" , ABC );
160- Assert .assertEquals (1 , trie .get ("" ).size ());
126+ assertList (EMPTY , EMPTY );
161127 }
162128
163129 @ Test
164130 public void testWithOrAndWildcard () {
165- final String key = ABC + WildcardTrie .OR_STRING + CCB ;
166- trie .put (key , "" );
167- Assert .assertTrue (ABC + NOT_FOUND_BY + key , trie .get (ABC ).contains ("" ));
168- Assert .assertTrue (CCB + NOT_FOUND_BY + key , trie .get (CCB ).contains ("" ));
131+ assertTrie (ABC + WildcardTrie .OR_STRING + CCB , ABC , CCB );
132+ }
133+
134+ private void assertTrie (final String key , final String ... positive ) {
135+ final List <String > negative = new ArrayList <>(ALL );
136+
137+ if (key != null ) {
138+ trie .put (key , key );
139+ }
140+
141+ Arrays .stream (positive ).forEach (k -> {
142+ negative .remove (k );
143+ Assert .assertTrue (k + NOT_FOUND_BY + key , trie .get (k ).contains (key ));
144+ });
145+
146+ negative .forEach (k -> {
147+ Assert .assertFalse (k + FOUND_BY + key , trie .get (k ).contains (key ));
148+ });
149+ }
150+
151+ private void assertList (final String key , final String ... expected ) {
152+ assertTrie (key , key );
153+
154+ final List <String > actual = trie .get (key );
155+ Collections .sort (actual );
169156
170- Assert .assertTrue (AABB + FOUND_BY + key , trie .get (AABB ).isEmpty ());
171- Assert .assertTrue (AB + FOUND_BY + key , trie .get (AB ).isEmpty ());
157+ Assert .assertEquals (Arrays .asList (expected ), actual );
172158 }
173159
174160}
0 commit comments