@@ -94,149 +94,57 @@ index 109146e2..4af8ce29 100644
9494 "//third_party/com/google/truth",
9595 "//third_party/com/pholser/quickcheck",
9696diff --git a/jflex/src/test/java/jflex/core/unicode/CharClassesQuickcheck.java b/jflex/src/test/java/jflex/core/unicode/CharClassesQuickcheck.java
97- index 876f0387..22be04d6 100644
97+ index 876f0387..5c80c0dc 100644
9898--- a/jflex/src/test/java/jflex/core/unicode/CharClassesQuickcheck.java
9999+++ b/jflex/src/test/java/jflex/core/unicode/CharClassesQuickcheck.java
100100@@ -12,6 +12,7 @@ package jflex.core.unicode;
101101 import static com.google.common.truth.Truth.assertThat;
102102 import static org.junit.Assume.assumeTrue;
103-
103+
104104+ import com.pholser.junit.quickcheck.From;
105105 import com.pholser.junit.quickcheck.Property;
106106 import com.pholser.junit.quickcheck.generator.InRange;
107107 import com.pholser.junit.quickcheck.generator.Size;
108- @@ -31,6 +32,7 @@ import org.junit.runner.RunWith;
109- */
110- @RunWith(JUnitQuickcheck.class)
111- public class CharClassesQuickcheck {
112- + UnicodeProperties unicodeProperties;
113-
114- // TODO(lsf): add testing for caseless; needs UnicodeProperties
115-
116- @@ -48,17 +50,24 @@ public class CharClassesQuickcheck {
108+ @@ -47,9 +48,7 @@ public class CharClassesQuickcheck {
109+
117110 @Property
118111 public void addSingle(
119- CharClasses classes,
112+ - CharClasses classes,
120113- @InRange(minInt = 0, maxInt = CharClasses.maxChar) int c1,
121114- @InRange(minInt = 0, maxInt = CharClasses.maxChar) int c2) {
122- + @From(IntCharGen.class) int c1,
123- + @From(IntCharGen.class) int c2,
124- + boolean caseless)
125- + throws UnicodeProperties.UnsupportedUnicodeVersionException {
126- +
115+ + CharClasses classes, @From(IntCharGen.class) int c1, @From(IntCharGen.class) int c2) {
127116 assumeTrue(c1 != c2);
128- - classes.makeClass(c1, false);
129- +
130- + if (caseless) {
131- + classesInit(classes);
132- + }
133- +
134- + classes.makeClass(c1, caseless);
117+ classes.makeClass(c1, false);
135118 assertThat(classes.invariants()).isTrue();
136- assertThat(classes.getClassCode(c1)).isNotEqualTo(classes.getClassCode(c2));
119+ @@ -57,8 +56,7 @@ public class CharClassesQuickcheck {
137120 }
138-
121+
139122 @Property
140123- public void addSingleSingleton(
141124- CharClasses classes, @InRange(minInt = 0, maxInt = CharClasses.maxChar) int c) {
142125+ public void addSingleSingleton(CharClasses classes, @From(IntCharGen.class) int c) {
143126 classes.makeClass(c, false);
144127 IntCharSet set = classes.getCharClass(classes.getClassCode(c));
145128 assertThat(set).isEqualTo(IntCharSet.ofCharacter(c));
146- @@ -68,11 +77,17 @@ public class CharClassesQuickcheck {
129+ @@ -68,7 +66,7 @@ public class CharClassesQuickcheck {
147130 public void addSet(
148131 CharClasses classes,
149132 @InRange(maxInt = CharClasses.maxChar) IntCharSet set,
150133- @InRange(minInt = 0, maxInt = CharClasses.maxChar) int c) {
151- + @From(IntCharGen.class) int c,
152- + boolean caseless)
153- + throws UnicodeProperties.UnsupportedUnicodeVersionException {
154-
134+ + @From(IntCharGen.class) int c) {
135+
155136 assumeTrue(!set.contains(c));
156-
157- - classes.makeClass(set, false);
158- + if (caseless) {
159- + classesInit(classes);
160- + }
161- +
162- + classes.makeClass(set, caseless);
163- assertThat(classes.invariants()).isTrue();
164-
165- int[] classCodes = classes.getClassCodes(set, false);
166- @@ -84,9 +99,15 @@ public class CharClassesQuickcheck {
167-
168- @Property
169- public void addSetParts(
170- - CharClasses classes, @InRange(maxInt = CharClasses.maxChar) IntCharSet set) {
171- + CharClasses classes, @InRange(maxInt = CharClasses.maxChar) IntCharSet set, boolean caseless)
172- + throws UnicodeProperties.UnsupportedUnicodeVersionException {
173-
174- - classes.makeClass(set, false);
175- + if (caseless) {
176- + classesInit(classes);
177- + set = set.getCaseless(unicodeProperties);
178- + }
179- +
180- + classes.makeClass(set, caseless);
181-
182- int[] classCodes = classes.getClassCodes(set, false);
183- IntCharSet allParts = new IntCharSet();
184- @@ -98,9 +119,15 @@ public class CharClassesQuickcheck {
185-
186- @Property
187- public void addSetComplement(
188- - CharClasses classes, @InRange(maxInt = CharClasses.maxChar) IntCharSet set) {
189- + CharClasses classes, @InRange(maxInt = CharClasses.maxChar) IntCharSet set, boolean caseless)
190- + throws UnicodeProperties.UnsupportedUnicodeVersionException {
191- +
192- + if (caseless) {
193- + classesInit(classes);
194- + set = set.getCaseless(unicodeProperties);
195- + }
196-
197- - classes.makeClass(set, false);
198- + classes.makeClass(set, caseless);
199-
200- int[] notCodes = classes.getClassCodes(set, true);
201- IntCharSet others = new IntCharSet();
202- @@ -112,11 +139,16 @@ public class CharClassesQuickcheck {
203-
137+
138+ @@ -111,8 +109,7 @@ public class CharClassesQuickcheck {
139+ }
140+
204141 @Property
205- public void addString(
142+ - public void addString(
206143- CharClasses classes, String s, @InRange(minInt = 0, maxInt = CharClasses.maxChar) int c) {
207- + CharClasses classes, String s, @From(IntCharGen.class) int c, boolean caseless)
208- + throws UnicodeProperties.UnsupportedUnicodeVersionException {
209-
144+ + public void addString(CharClasses classes, String s, @From(IntCharGen.class) int c) {
145+
210146 assumeTrue(s.indexOf(c) < 0);
211-
212- - classes.makeClass(s, false);
213- + if (caseless) {
214- + classesInit(classes);
215- + }
216- +
217- + classes.makeClass(s, caseless);
218- assertThat(classes.invariants()).isTrue();
219-
220- int cCode = classes.getClassCode(c);
221- @@ -203,4 +235,18 @@ public class CharClassesQuickcheck {
222- assertThat(intervals[i].end + 1).isEqualTo(intervals[i + 1].start);
223- }
224- }
225- +
226- + private void classesInit(CharClasses classes)
227- + throws UnicodeProperties.UnsupportedUnicodeVersionException {
228- + // init classes
229- + unicodeProperties = new UnicodeProperties();
230- + classes.init(
231- + CharClasses.maxChar,
232- + new ILexScan() {
233- + @Override
234- + public UnicodeProperties getUnicodeProperties() {
235- + return unicodeProperties;
236- + }
237- + });
238- + }
239- }
147+
240148diff --git a/jflex/src/test/java/jflex/core/unicode/IntCharGen.java b/jflex/src/test/java/jflex/core/unicode/IntCharGen.java
241149new file mode 100644
242150index 00000000..45e47ee8
@@ -299,13 +207,13 @@ index 7ff19e45..9d80976a 100644
299207 import com.pholser.junit.quickcheck.random.SourceOfRandomness;
300208 import jflex.chars.IntervalGen;
301209+ import jflex.logging.Out;
302-
210+
303211 /**
304212 * Generator for random {@link IntCharSet} instances.
305213@@ -48,6 +49,15 @@ public class IntCharSetGen extends Generator<IntCharSet> {
306214 result.add(intervals.generate(r, status));
307215 }
308-
216+
309217+ // randomly add possible additional cased character
310218+ if (numIntervals < maxSize && r.nextBoolean()) {
311219+ try {
@@ -317,7 +225,7 @@ index 7ff19e45..9d80976a 100644
317225+
318226 return result;
319227 }
320-
228+
321229diff --git a/jflex/src/test/java/jflex/state/BUILD.bazel b/jflex/src/test/java/jflex/state/BUILD.bazel
322230index 936249c8..7481ca43 100644
323231--- a/jflex/src/test/java/jflex/state/BUILD.bazel
@@ -388,27 +296,27 @@ index e9962397..1f4d2443 100644
388296@@ -50,6 +50,11 @@ public class StateSetGen extends Generator<StateSet> {
389297 result.addState(r.nextInt(minRange, maxRange));
390298 }
391-
299+
392300+ // add large value 20% of the time
393301+ if (r.nextInt(1, 5) == 5) {
394302+ result.addState(r.nextInt(minRange + 100_000, maxRange + 100_000));
395303+ }
396304+
397305 return result;
398306 }
399-
307+
400308diff --git a/jflex/src/test/java/jflex/state/StateSetQuickcheck.java b/jflex/src/test/java/jflex/state/StateSetQuickcheck.java
401309index 2537700d..0ac0e12c 100644
402310--- a/jflex/src/test/java/jflex/state/StateSetQuickcheck.java
403311+++ b/jflex/src/test/java/jflex/state/StateSetQuickcheck.java
404312@@ -11,9 +11,13 @@ package jflex.state;
405-
313+
406314 import static com.google.common.truth.Truth.assertThat;
407315 import static com.google.common.truth.Truth.assertWithMessage;
408316+ import static org.hamcrest.core.IsEqual.equalTo;
409317+ import static org.junit.Assume.assumeThat;
410318 import static org.junit.Assume.assumeTrue;
411-
319+
412320+ import com.pholser.junit.quickcheck.From;
413321 import com.pholser.junit.quickcheck.Property;
414322+ import com.pholser.junit.quickcheck.generator.Also;
@@ -441,11 +349,11 @@ index 2537700d..0ac0e12c 100644
441349+ s.remove(largerState);
442350+ assertThat(s).isEqualTo(sPre);
443351 }
444-
352+
445353 @Property
446354@@ -181,10 +197,27 @@ public class StateSetQuickcheck {
447355 }
448-
356+
449357 @Property
450358- public void addStateDoesNotRemove(StateSet set, @InRange(minInt = 0, maxInt = 34) int e) {
451359+ public void addStateDoesNotRemove(
@@ -470,7 +378,7 @@ index 2537700d..0ac0e12c 100644
470378+ assertThat(set.hasElement(newValue)).isTrue();
471379+ assertThat(setPre.contains(set)).isFalse();
472380 }
473-
381+
474382 @Property
475383@@ -208,6 +241,12 @@ public class StateSetQuickcheck {
476384 StateSet comp = s1.complement(s2);
@@ -483,7 +391,7 @@ index 2537700d..0ac0e12c 100644
483391+ assertThat(comp.contains(s1)).isFalse();
484392+ }
485393 }
486-
394+
487395 @Property
488396@@ -228,6 +267,13 @@ public class StateSetQuickcheck {
489397 public void containsElements(StateSet s, @InRange(minInt = 0, maxInt = 34) int e) {
@@ -497,5 +405,5 @@ index 2537700d..0ac0e12c 100644
497405+ }
498406+ assertThat(s.containsElements()).isFalse();
499407 }
500-
501- @Property
408+
409+ @Property
0 commit comments