diff --git a/wires-support/src/test/java/fr/cla/wires/support/oo/test/AbstractValueObject_PbtTest.java b/wires-support/src/test/java/fr/cla/wires/support/oo/test/AbstractValueObject_PbtTest.java index ad5c9bc..c7385a8 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/oo/test/AbstractValueObject_PbtTest.java +++ b/wires-support/src/test/java/fr/cla/wires/support/oo/test/AbstractValueObject_PbtTest.java @@ -3,7 +3,9 @@ import com.pholser.junit.quickcheck.Property; import com.pholser.junit.quickcheck.runner.JUnitQuickcheck; +import fr.cla.wires.support.oo.AbstractValueObject; import fr.cla.wires.support.pbt.*; +import org.junit.Assume; import org.junit.runner.RunWith; import static org.assertj.core.api.Assertions.assertThat; @@ -98,6 +100,8 @@ public void hashCode_should_be_consistent( public void equals_should_be_false_for_different_types( @RandomVoPair VoPair p ) { + Assume.assumeFalse(VoPairGenerator.current == AbstractValueObject.Equatability.IS_INSTANCE); + if(!p.x.equals(p.y)) return; assertThat( diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/VoGenerator.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/VoGenerator.java index 72ed138..b9b1d17 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/VoGenerator.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/VoGenerator.java @@ -3,6 +3,7 @@ import com.pholser.junit.quickcheck.generator.GenerationStatus; import com.pholser.junit.quickcheck.generator.Generator; import com.pholser.junit.quickcheck.random.SourceOfRandomness; +import fr.cla.wires.support.functional.Indexed; import fr.cla.wires.support.oo.AbstractValueObject; import fr.cla.wires.support.pbt.examplevos.*; @@ -15,17 +16,22 @@ public VoGenerator() { @Override public VoSingleton generate(SourceOfRandomness rand, GenerationStatus status) { - return new VoSingleton(generate(rand)); + return new VoSingleton(generate(rand, generateEquatability(rand))); } - static AbstractValueObject generate(SourceOfRandomness rand) { - switch (rand.nextInt(6)) { - case 0: return VO1.random(rand); - case 1: return VO2.random(rand); - case 2: return VO1A.random(rand); - case 3: return VO1B.random(rand); - case 4: return VO2A.random(rand); - case 5: return VO2B.random(rand); + static AbstractValueObject.Equatability generateEquatability(SourceOfRandomness rand) { + return rand.choose(AbstractValueObject.Equatability.values()); + } + + static AbstractValueObject generate(SourceOfRandomness rand, AbstractValueObject.Equatability e) { + switch (rand.nextInt(7)) { + case 0: return VO1.random(rand, e); + case 1: return VO2.random(rand, e); + case 2: return VO1A.random(rand, e); + case 3: return VO1B.random(rand, e); + case 4: return VO2A.random(rand, e); + case 5: return VO2B.random(rand, e); + case 6: return Indexed.index(rand.nextInt(), generate(rand, e)); default: throw new AssertionError(); } } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/VoPairGenerator.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/VoPairGenerator.java index 867a059..e84ffe7 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/VoPairGenerator.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/VoPairGenerator.java @@ -3,19 +3,23 @@ import com.pholser.junit.quickcheck.generator.GenerationStatus; import com.pholser.junit.quickcheck.generator.Generator; import com.pholser.junit.quickcheck.random.SourceOfRandomness; +import fr.cla.wires.support.oo.AbstractValueObject; //@formatter:off public class VoPairGenerator extends Generator { + public static AbstractValueObject.Equatability current = null; + public VoPairGenerator() { super(VoPair.class); } @Override public VoPair generate(SourceOfRandomness rand, GenerationStatus status) { + current = VoGenerator.generateEquatability(rand); return new VoPair( - VoGenerator.generate(rand), - VoGenerator.generate(rand) + VoGenerator.generate(rand, current), + VoGenerator.generate(rand, current) ); } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/VoTripletGenerator.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/VoTripletGenerator.java index 2acc0ea..48c6a32 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/VoTripletGenerator.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/VoTripletGenerator.java @@ -3,6 +3,7 @@ import com.pholser.junit.quickcheck.generator.GenerationStatus; import com.pholser.junit.quickcheck.generator.Generator; import com.pholser.junit.quickcheck.random.SourceOfRandomness; +import fr.cla.wires.support.oo.AbstractValueObject; //@formatter:off public class VoTripletGenerator extends Generator { @@ -13,10 +14,11 @@ public VoTripletGenerator() { @Override public VoTriplet generate(SourceOfRandomness rand, GenerationStatus status) { + AbstractValueObject.Equatability e = VoGenerator.generateEquatability(rand); return new VoTriplet( - VoGenerator.generate(rand), - VoGenerator.generate(rand), - VoGenerator.generate(rand) + VoGenerator.generate(rand, e), + VoGenerator.generate(rand, e), + VoGenerator.generate(rand, e) ); } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1.java index 152a27f..d7fcc1a 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1.java @@ -12,13 +12,13 @@ public class VO1 extends AbstractValueObject { protected final Value x; - public VO1(Value x) { - super(VO1.class); + public VO1(Value x, Equatability e) { + super(VO1.class, e); this.x = x; } - public static VO1 random(SourceOfRandomness rand) { - return new VO1(Value.random(rand)); + public static VO1 random(SourceOfRandomness rand, Equatability e) { + return new VO1(Value.random(rand), e); } @Override @@ -28,7 +28,7 @@ protected List equalityCriteria() { @Override protected boolean canEqual(AbstractValueObject that) { - return that instanceof VO1; + return super.canEqual(that) && that instanceof VO1; } } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1A.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1A.java index 13a4cb7..caa2ecf 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1A.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1A.java @@ -11,15 +11,16 @@ public class VO1A extends VO1 { private final Value y; - public VO1A(Value y, Value x) { - super(x); + public VO1A(Value y, Value x, Equatability e) { + super(x, e); this.y = y; } - public static VO1A random(SourceOfRandomness rand) { + public static VO1A random(SourceOfRandomness rand, Equatability e) { return new VO1A( Value.random(rand), - Value.random(rand) + Value.random(rand), + e ); } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1B.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1B.java index 542d48f..93666c8 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1B.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO1B.java @@ -11,15 +11,16 @@ public class VO1B extends VO1 { private final Value y; - public VO1B(Value y, Value x) { - super(x); + public VO1B(Value y, Value x, Equatability e) { + super(x, e); this.y = y; } - public static VO1B random(SourceOfRandomness rand) { + public static VO1B random(SourceOfRandomness rand, Equatability e) { return new VO1B( Value.random(rand), - Value.random(rand) + Value.random(rand), + e ); } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2.java index 3de8434..2d098fb 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2.java @@ -12,13 +12,13 @@ public class VO2 extends AbstractValueObject { protected final Value x; - public VO2(Value x) { - super(VO2.class); + public VO2(Value x, Equatability e) { + super(VO2.class, e); this.x = x; } - public static VO2 random(SourceOfRandomness rand) { - return new VO2(Value.random(rand)); + public static VO2 random(SourceOfRandomness rand, Equatability e) { + return new VO2(Value.random(rand), e); } @Override @@ -28,7 +28,7 @@ protected List equalityCriteria() { @Override protected boolean canEqual(AbstractValueObject that) { - return that instanceof VO2; + return super.canEqual(that) && that instanceof VO2; } } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2A.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2A.java index 1d11c92..c2ad8ba 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2A.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2A.java @@ -11,15 +11,16 @@ public class VO2A extends VO2 { private final Value y; - public VO2A(Value y, Value x) { - super(x); + public VO2A(Value y, Value x, Equatability e) { + super(x, e); this.y = y; } - public static VO2A random(SourceOfRandomness rand) { + public static VO2A random(SourceOfRandomness rand, Equatability e) { return new VO2A( Value.random(rand), - Value.random(rand) + Value.random(rand), + e ); } diff --git a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2B.java b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2B.java index 33872d6..a25e3f4 100644 --- a/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2B.java +++ b/wires-support/src/test/java/fr/cla/wires/support/pbt/examplevos/VO2B.java @@ -11,15 +11,16 @@ public class VO2B extends VO2 { private final Value y; - public VO2B(Value y, Value x) { - super(x); + public VO2B(Value y, Value x, Equatability e) { + super(x, e); this.y = y; } - public static VO2B random(SourceOfRandomness rand) { + public static VO2B random(SourceOfRandomness rand, Equatability e) { return new VO2B( Value.random(rand), - Value.random(rand) + Value.random(rand), + e ); }