Skip to content

Commit 2d8a668

Browse files
committed
add Number types Byte, Short and BigInteger
1 parent 03419fa commit 2d8a668

3 files changed

Lines changed: 129 additions & 23 deletions

File tree

src/main/java/it/aboutbits/springboot/testing/validation/source/BiggerThanValueSource.java

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.NonNull;
66

77
import java.math.BigDecimal;
8+
import java.math.BigInteger;
89
import java.util.HashMap;
910
import java.util.Map;
1011
import java.util.Random;
@@ -16,6 +17,12 @@ public class BiggerThanValueSource implements ValueSource {
1617
private static final Random RANDOM = new Random();
1718

1819
static {
20+
TYPE_SOURCES.put(Byte.class, BiggerThanValueSource::getByteStream);
21+
TYPE_SOURCES.put(byte.class, BiggerThanValueSource::getByteStream);
22+
23+
TYPE_SOURCES.put(Short.class, BiggerThanValueSource::getShortStream);
24+
TYPE_SOURCES.put(short.class, BiggerThanValueSource::getShortStream);
25+
1926
TYPE_SOURCES.put(Integer.class, BiggerThanValueSource::getIntegerStream);
2027
TYPE_SOURCES.put(int.class, BiggerThanValueSource::getIntegerStream);
2128

@@ -28,11 +35,12 @@ public class BiggerThanValueSource implements ValueSource {
2835
TYPE_SOURCES.put(Double.class, BiggerThanValueSource::getDoubleStream);
2936
TYPE_SOURCES.put(double.class, BiggerThanValueSource::getDoubleStream);
3037

38+
TYPE_SOURCES.put(BigInteger.class, BiggerThanValueSource::getBigIntegerStream);
3139
TYPE_SOURCES.put(BigDecimal.class, BiggerThanValueSource::getBigDecimalStream);
3240
TYPE_SOURCES.put(ScaledBigDecimal.class, BiggerThanValueSource::getScaledBigDecimalStream);
3341
}
3442

35-
@SuppressWarnings("unchecked")
43+
@SuppressWarnings("unused")
3644
public static void registerType(Class<?> type, Function<Object[], Stream<?>> source) {
3745
TYPE_SOURCES.put(type, source);
3846
}
@@ -48,14 +56,38 @@ public <T> Stream<T> values(Class<T> propertyClass, Object... args) {
4856
throw new IllegalArgumentException("Property class not supported!");
4957
}
5058

59+
@NonNull
60+
private static Stream<Byte> getByteStream(Object[] args) {
61+
var minValue = (byte) (Long.valueOf((long) args[0]).byteValue() + 1);
62+
var maxValue = Byte.MAX_VALUE;
63+
64+
return Stream.concat(
65+
Stream.of(minValue, maxValue),
66+
RANDOM.ints(1, minValue, maxValue)
67+
.mapToObj(value -> Byte.valueOf((byte) value))
68+
);
69+
}
70+
71+
@NonNull
72+
private static Stream<Short> getShortStream(Object[] args) {
73+
var minValue = (short) (Long.valueOf((long) args[0]).shortValue() + 1);
74+
var maxValue = Short.MAX_VALUE;
75+
76+
return Stream.concat(
77+
Stream.of(minValue, maxValue),
78+
RANDOM.ints(1, minValue, maxValue)
79+
.mapToObj(value -> Short.valueOf((short) value))
80+
);
81+
}
82+
5183
@NonNull
5284
private static Stream<Integer> getIntegerStream(Object[] args) {
5385
var minValue = Long.valueOf((long) args[0]).intValue() + 1;
5486
var maxValue = Integer.MAX_VALUE;
5587

5688
return Stream.concat(
5789
Stream.of(minValue, maxValue),
58-
RANDOM.ints(minValue, maxValue).limit(1).boxed()
90+
RANDOM.ints(1, minValue, maxValue).boxed()
5991
);
6092
}
6193

@@ -66,7 +98,7 @@ private static Stream<Long> getLongStream(Object[] args) {
6698

6799
return Stream.concat(
68100
Stream.of(minValue, maxValue),
69-
RANDOM.longs(minValue, maxValue).limit(1).boxed()
101+
RANDOM.longs(1, minValue, maxValue).boxed()
70102
);
71103
}
72104

@@ -77,7 +109,7 @@ private static Stream<Float> getFloatStream(Object[] args) {
77109

78110
return Stream.concat(
79111
Stream.of(minValue, maxValue),
80-
RANDOM.doubles(minValue, maxValue).limit(1).boxed().map(
112+
RANDOM.doubles(1, minValue, maxValue).boxed().map(
81113
Double::floatValue
82114
)
83115
);
@@ -90,18 +122,20 @@ private static Stream<Double> getDoubleStream(Object[] args) {
90122

91123
return Stream.concat(
92124
Stream.of(minValue, maxValue),
93-
RANDOM.doubles(minValue, maxValue).limit(1).boxed()
125+
RANDOM.doubles(1, minValue, maxValue).boxed()
94126
);
95127
}
96128

97129
@NonNull
98-
private static Stream<ScaledBigDecimal> getScaledBigDecimalStream(Object[] args) {
99-
var minValue = Long.valueOf((long) args[0]).doubleValue() + 0.1d;
100-
var maxValue = Double.MAX_VALUE;
130+
private static Stream<BigInteger> getBigIntegerStream(Object[] args) {
131+
var minValue = (long) args[0] + 1;
132+
var maxValue = Long.MAX_VALUE;
101133

102134
return Stream.concat(
103-
Stream.of(ScaledBigDecimal.valueOf(minValue), ScaledBigDecimal.valueOf(maxValue)),
104-
RANDOM.doubles(minValue, maxValue).limit(1).boxed().map(ScaledBigDecimal::valueOf)
135+
Stream.of(BigInteger.valueOf(minValue), BigInteger.valueOf(maxValue)),
136+
RANDOM.longs(1, minValue, maxValue).boxed().map(
137+
BigInteger::valueOf
138+
)
105139
);
106140
}
107141

@@ -112,7 +146,22 @@ private static Stream<BigDecimal> getBigDecimalStream(Object[] args) {
112146

113147
return Stream.concat(
114148
Stream.of(BigDecimal.valueOf(minValue), BigDecimal.valueOf(maxValue)),
115-
RANDOM.doubles(minValue, maxValue).limit(1).boxed().map(BigDecimal::valueOf)
149+
RANDOM.doubles(1, minValue, maxValue).boxed().map(
150+
BigDecimal::valueOf
151+
)
152+
);
153+
}
154+
155+
@NonNull
156+
private static Stream<ScaledBigDecimal> getScaledBigDecimalStream(Object[] args) {
157+
var minValue = Long.valueOf((long) args[0]).doubleValue() + 0.1d;
158+
var maxValue = Double.MAX_VALUE;
159+
160+
return Stream.concat(
161+
Stream.of(ScaledBigDecimal.valueOf(minValue), ScaledBigDecimal.valueOf(maxValue)),
162+
RANDOM.doubles(1, minValue, maxValue).boxed().map(
163+
ScaledBigDecimal::valueOf
164+
)
116165
);
117166
}
118167
}

src/main/java/it/aboutbits/springboot/testing/validation/source/LessThanValueSource.java

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.NonNull;
66

77
import java.math.BigDecimal;
8+
import java.math.BigInteger;
89
import java.util.HashMap;
910
import java.util.Map;
1011
import java.util.Random;
@@ -17,6 +18,12 @@ public class LessThanValueSource implements ValueSource {
1718
private static final Random RANDOM = new Random();
1819

1920
static {
21+
TYPE_SOURCES.put(Byte.class, LessThanValueSource::getByteStream);
22+
TYPE_SOURCES.put(byte.class, LessThanValueSource::getByteStream);
23+
24+
TYPE_SOURCES.put(Short.class, LessThanValueSource::getShortStream);
25+
TYPE_SOURCES.put(short.class, LessThanValueSource::getShortStream);
26+
2027
TYPE_SOURCES.put(Integer.class, LessThanValueSource::getIntegerStream);
2128
TYPE_SOURCES.put(int.class, LessThanValueSource::getIntegerStream);
2229

@@ -29,6 +36,7 @@ public class LessThanValueSource implements ValueSource {
2936
TYPE_SOURCES.put(Double.class, LessThanValueSource::getDoubleStream);
3037
TYPE_SOURCES.put(double.class, LessThanValueSource::getDoubleStream);
3138

39+
TYPE_SOURCES.put(BigInteger.class, LessThanValueSource::getBigIntegerStream);
3240
TYPE_SOURCES.put(BigDecimal.class, LessThanValueSource::getBigDecimalStream);
3341
TYPE_SOURCES.put(ScaledBigDecimal.class, LessThanValueSource::getScaledBigDecimalStream);
3442
}
@@ -49,14 +57,38 @@ public <T> Stream<T> values(Class<T> propertyClass, Object... args) {
4957
throw new IllegalArgumentException("Property class not supported!");
5058
}
5159

60+
@NonNull
61+
private static Stream<Byte> getByteStream(Object[] args) {
62+
var minValue = Byte.MIN_VALUE;
63+
var maxValue = (byte) (Long.valueOf((long) args[0]).byteValue() - 1);
64+
65+
return Stream.concat(
66+
Stream.of(minValue, maxValue),
67+
RANDOM.ints(1, minValue, maxValue)
68+
.mapToObj(value -> Byte.valueOf((byte) value))
69+
);
70+
}
71+
72+
@NonNull
73+
private static Stream<Short> getShortStream(Object[] args) {
74+
var minValue = Short.MIN_VALUE;
75+
var maxValue = (short) (Long.valueOf((long) args[0]).shortValue() - 1);
76+
77+
return Stream.concat(
78+
Stream.of(minValue, maxValue),
79+
RANDOM.ints(1, minValue, maxValue)
80+
.mapToObj(value -> Short.valueOf((short) value))
81+
);
82+
}
83+
5284
@NonNull
5385
private static Stream<Integer> getIntegerStream(Object[] args) {
5486
var minValue = Integer.MIN_VALUE;
5587
var maxValue = Long.valueOf((long) args[0]).intValue() - 1;
5688

5789
return Stream.concat(
5890
Stream.of(minValue, maxValue),
59-
RANDOM.ints(minValue, maxValue).limit(1).boxed()
91+
RANDOM.ints(1, minValue, maxValue).boxed()
6092
);
6193
}
6294

@@ -67,7 +99,7 @@ private static Stream<Long> getLongStream(Object[] args) {
6799

68100
return Stream.concat(
69101
Stream.of(minValue, maxValue),
70-
RANDOM.longs(minValue, maxValue).limit(1).boxed()
102+
RANDOM.longs(1, minValue, maxValue).boxed()
71103
);
72104
}
73105

@@ -78,7 +110,7 @@ private static Stream<Float> getFloatStream(Object[] args) {
78110

79111
return Stream.concat(
80112
Stream.of(minValue, maxValue),
81-
RANDOM.doubles(1).map(d -> minValue + (maxValue - minValue) * d).boxed().map(
113+
RANDOM.doubles(1, minValue, maxValue).boxed().map(
82114
Double::floatValue
83115
)
84116
);
@@ -91,7 +123,20 @@ private static Stream<Double> getDoubleStream(Object[] args) {
91123

92124
return Stream.concat(
93125
Stream.of(minValue, maxValue),
94-
RANDOM.doubles(1).map(d -> minValue + (maxValue - minValue) * d).boxed()
126+
RANDOM.doubles(1, minValue, maxValue).boxed()
127+
);
128+
}
129+
130+
@NonNull
131+
private static Stream<BigInteger> getBigIntegerStream(Object[] args) {
132+
var minValue = Long.MIN_VALUE;
133+
var maxValue = (long) args[0] - 1;
134+
135+
return Stream.concat(
136+
Stream.of(BigInteger.valueOf(minValue), BigInteger.valueOf(maxValue)),
137+
RANDOM.longs(1, minValue, maxValue).boxed().map(
138+
BigInteger::valueOf
139+
)
95140
);
96141
}
97142

@@ -102,7 +147,9 @@ private static Stream<BigDecimal> getBigDecimalStream(Object[] args) {
102147

103148
return Stream.concat(
104149
Stream.of(BigDecimal.valueOf(minValue), BigDecimal.valueOf(maxValue)),
105-
RANDOM.doubles(1).map(d -> minValue + (maxValue - minValue) * d).boxed().map(BigDecimal::valueOf)
150+
RANDOM.doubles(1, minValue, maxValue).boxed().map(
151+
BigDecimal::valueOf
152+
)
106153
);
107154
}
108155

@@ -113,7 +160,9 @@ private static Stream<ScaledBigDecimal> getScaledBigDecimalStream(Object[] args)
113160

114161
return Stream.concat(
115162
Stream.of(ScaledBigDecimal.valueOf(minValue), ScaledBigDecimal.valueOf(maxValue)),
116-
RANDOM.doubles(1).map(d -> minValue + (maxValue - minValue) * d).boxed().map(ScaledBigDecimal::valueOf)
163+
RANDOM.doubles(1, minValue, maxValue).boxed().map(
164+
ScaledBigDecimal::valueOf
165+
)
117166
);
118167
}
119168
}

src/main/java/it/aboutbits/springboot/testing/validation/source/ZeroValueSource.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import it.aboutbits.springboot.toolbox.type.ScaledBigDecimal;
55

66
import java.math.BigDecimal;
7+
import java.math.BigInteger;
78
import java.util.HashMap;
89
import java.util.Map;
910
import java.util.function.Function;
@@ -13,20 +14,27 @@ public class ZeroValueSource implements ValueSource {
1314
private static final Map<Class<?>, Function<Object[], Stream<?>>> TYPE_SOURCES = new HashMap<>();
1415

1516
static {
17+
TYPE_SOURCES.put(Byte.class, (Object[] args) -> Stream.of((byte) 0));
18+
TYPE_SOURCES.put(byte.class, (Object[] args) -> Stream.of((byte) 0));
19+
20+
TYPE_SOURCES.put(Short.class, (Object[] args) -> Stream.of((short) 0));
21+
TYPE_SOURCES.put(short.class, (Object[] args) -> Stream.of((short) 0));
22+
1623
TYPE_SOURCES.put(Integer.class, (Object[] args) -> Stream.of(0));
1724
TYPE_SOURCES.put(int.class, (Object[] args) -> Stream.of(0));
1825

1926
TYPE_SOURCES.put(Long.class, (Object[] args) -> Stream.of(0L));
2027
TYPE_SOURCES.put(long.class, (Object[] args) -> Stream.of(0L));
2128

22-
TYPE_SOURCES.put(Float.class, (Object[] args) -> Stream.of(0F));
23-
TYPE_SOURCES.put(float.class, (Object[] args) -> Stream.of(0F));
29+
TYPE_SOURCES.put(Float.class, (Object[] args) -> Stream.of(0f));
30+
TYPE_SOURCES.put(float.class, (Object[] args) -> Stream.of(0f));
2431

25-
TYPE_SOURCES.put(Double.class, (Object[] args) -> Stream.of(0D));
26-
TYPE_SOURCES.put(double.class, (Object[] args) -> Stream.of(0D));
32+
TYPE_SOURCES.put(Double.class, (Object[] args) -> Stream.of(0d));
33+
TYPE_SOURCES.put(double.class, (Object[] args) -> Stream.of(0d));
2734

28-
TYPE_SOURCES.put(BigDecimal.class, (Object[] args) -> Stream.of(BigDecimal.valueOf(0)));
29-
TYPE_SOURCES.put(ScaledBigDecimal.class, (Object[] args) -> Stream.of(ScaledBigDecimal.valueOf(0)));
35+
TYPE_SOURCES.put(BigInteger.class, (Object[] args) -> Stream.of(BigInteger.ZERO));
36+
TYPE_SOURCES.put(BigDecimal.class, (Object[] args) -> Stream.of(BigDecimal.ZERO));
37+
TYPE_SOURCES.put(ScaledBigDecimal.class, (Object[] args) -> Stream.of(ScaledBigDecimal.ZERO));
3038
}
3139

3240
@SuppressWarnings("unused")

0 commit comments

Comments
 (0)