Skip to content

Commit 5bf7cf4

Browse files
committed
Minor renames and class removal refactorings.
1 parent 2cb087d commit 5bf7cf4

13 files changed

Lines changed: 114 additions & 119 deletions

File tree

etc/junit4-missing-features.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
randomBoolean(), randomFloat(), etc.
1616
- Encourages testing over a broad input domain rather than fixed values
1717

18+
* utility rules (require assertions, etc.)
19+
1820
[possibly doable with a custom test engine]
1921

2022
- predictably shuffled test execution order
@@ -27,4 +29,4 @@
2729
- how are jupiter timeouts working together with leaked threads ext.?
2830
- maybe bring back thread leak zombies annotation (if we can't cleanly terminate leaked threads, ignore all remaining tests).
2931
- maybe move some of the implementation details to a non-exposed package?
30-
- regenerate the javadocs with public API only.
32+
- regenerate the javadocs with public API only.

etc/problems-thoughts.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

randomizedtesting-jupiter/src/main/java/com/carrotsearch/randomizedtesting/jupiter/FixSeed.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
* This annotation should be placed on classes or methods that are {@link Randomized} and would like
1313
* to use a constant seed (for reproducing a problem or other reasons).
1414
*
15-
* <p>Note that seed fixing is always possible by setting {@link
16-
* RandomizedContextExtension.SysProps#TESTS_SEED} system property, this is just convenience.
15+
* <p>Note that seed fixing is always possible by setting {@link SysProps#TESTS_SEED} system
16+
* property, this is just convenience.
1717
*/
1818
@Target({ElementType.TYPE, ElementType.METHOD})
1919
@Documented
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.carrotsearch.randomizedtesting.jupiter;
2+
3+
import com.carrotsearch.randomizedtesting.jupiter.internals.Xoroshiro128PlusRandom;
4+
import java.util.Locale;
5+
import java.util.Random;
6+
import java.util.function.LongFunction;
7+
import java.util.function.Supplier;
8+
import java.util.stream.Collectors;
9+
import java.util.stream.Stream;
10+
11+
/** The supplier of {@link Random} instances. */
12+
public enum RandomInstanceFactory implements Supplier<LongFunction<Random>> {
13+
/** The default, built-in {@link Random}. There may be some synchronization overhead. */
14+
JDK,
15+
16+
/**
17+
* Xoroshiro128PlusRandom. Not synchronized anywhere.
18+
*
19+
* @see "https://prng.di.unimi.it/"
20+
*/
21+
XOROSHIRO_128_PLUS;
22+
23+
public static RandomInstanceFactory parse(String v) {
24+
try {
25+
return RandomInstanceFactory.valueOf(v.toUpperCase(Locale.ROOT));
26+
} catch (IllegalArgumentException e) {
27+
throw new IllegalArgumentException(
28+
"Can't parse "
29+
+ SysProps.TESTS_RANDOM_FACTORY.propertyKey
30+
+ " property: "
31+
+ v
32+
+ " [valid values: "
33+
+ Stream.of(RandomInstanceFactory.values())
34+
.map(vv -> vv.name().toLowerCase(Locale.ROOT))
35+
.collect(Collectors.joining(", "))
36+
+ "]");
37+
}
38+
}
39+
40+
@Override
41+
public LongFunction<Random> get() {
42+
return switch (this) {
43+
case JDK -> Random::new;
44+
case XOROSHIRO_128_PLUS -> Xoroshiro128PlusRandom::new;
45+
};
46+
}
47+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.carrotsearch.randomizedtesting.jupiter;
2+
3+
import java.util.Random;
4+
5+
/** System properties controlling the runtime behavior of this project extensions. */
6+
public enum SysProps {
7+
/** Initial root seed value. If empty, a random value is picked for the root seed. */
8+
TESTS_SEED("tests.seed"),
9+
10+
/**
11+
* String name of the factory used to create {@link Random} instances (see {@link
12+
* RandomInstanceFactory} for named implementations).
13+
*
14+
* @see RandomInstanceFactory
15+
*/
16+
TESTS_RANDOM_FACTORY("tests.random.factory"),
17+
18+
/**
19+
* A boolean property that enables stricter sanity assertions (including forbidding thread-shared
20+
* access to the returned {@link Random} instances, which makes tests more predictable).
21+
*/
22+
TESTS_RANDOM_ASSERTING("tests.random.asserting");
23+
24+
public final String propertyKey;
25+
26+
SysProps(String key) {
27+
this.propertyKey = key;
28+
}
29+
}

randomizedtesting-jupiter/src/main/java/com/carrotsearch/randomizedtesting/jupiter/internals/RandomFactory.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

randomizedtesting-jupiter/src/main/java/com/carrotsearch/randomizedtesting/jupiter/internals/RandomizedContextExtension.java

Lines changed: 8 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package com.carrotsearch.randomizedtesting.jupiter.internals;
22

3+
import com.carrotsearch.randomizedtesting.jupiter.RandomInstanceFactory;
34
import com.carrotsearch.randomizedtesting.jupiter.RandomizedContext;
45
import com.carrotsearch.randomizedtesting.jupiter.Seed;
56
import com.carrotsearch.randomizedtesting.jupiter.SeedChain;
7+
import com.carrotsearch.randomizedtesting.jupiter.SysProps;
68
import java.util.ArrayList;
79
import java.util.Arrays;
810
import java.util.List;
9-
import java.util.Locale;
1011
import java.util.Objects;
1112
import java.util.Optional;
1213
import java.util.Random;
13-
import java.util.function.Supplier;
14-
import java.util.stream.Collectors;
15-
import java.util.stream.Stream;
14+
import java.util.function.LongFunction;
1615
import org.junit.jupiter.api.extension.BeforeAllCallback;
1716
import org.junit.jupiter.api.extension.ExtensionContext;
1817
import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler;
@@ -31,71 +30,14 @@ public class RandomizedContextExtension
3130

3231
private static final String CTX_KEY_RANDOMIZED_CONTEXT = "randomizedContext";
3332

34-
/** System properties controlling the extension. */
35-
public enum SysProps {
36-
/** Initial root seed value. If empty, a random value is picked for the root seed. */
37-
TESTS_SEED("tests.seed"),
38-
39-
/**
40-
* String name of the factory used to create {@link Random} instances (see {@link
41-
* RandomFactoryType} for named implementations).
42-
*
43-
* @see RandomFactoryType
44-
*/
45-
TESTS_RANDOM_FACTORY("tests.random.factory"),
46-
47-
/**
48-
* A boolean property that enables stricter sanity assertions (including forbidding
49-
* thread-shared access to the returned {@link Random} instances, which makes tests more
50-
* predictable).
51-
*/
52-
TESTS_RANDOM_ASSERTING("tests.random.asserting");
53-
54-
public final String propertyKey;
55-
56-
SysProps(String key) {
57-
this.propertyKey = key;
58-
}
59-
}
60-
61-
public enum RandomFactoryType implements Supplier<RandomFactory> {
62-
JDK,
63-
XOROSHIRO_128_PLUS;
64-
65-
public static RandomFactoryType parse(String v) {
66-
try {
67-
return RandomFactoryType.valueOf(v.toUpperCase(Locale.ROOT));
68-
} catch (IllegalArgumentException e) {
69-
throw new IllegalArgumentException(
70-
"Can't parse "
71-
+ SysProps.TESTS_RANDOM_FACTORY.propertyKey
72-
+ " property: "
73-
+ v
74-
+ " [valid values: "
75-
+ Stream.of(RandomFactoryType.values())
76-
.map(vv -> vv.name().toLowerCase(Locale.ROOT))
77-
.collect(Collectors.joining(", "))
78-
+ "]");
79-
}
80-
}
81-
82-
@Override
83-
public RandomFactory get() {
84-
return switch (this) {
85-
case JDK -> Random::new;
86-
case XOROSHIRO_128_PLUS -> Xoroshiro128PlusRandom::new;
87-
};
88-
}
89-
}
90-
9133
//
9234
// before-all (class-level context setup).
9335
//
9436

9537
@Override
9638
public void beforeAll(ExtensionContext extensionContext) {
9739
// Set up Random factory.
98-
RandomFactory randomFactory = initializeRandomFactory(extensionContext);
40+
var randomFactory = initializeRandomFactory(extensionContext);
9941

10042
// Bootstrap the root store's context. Don't know if this can be done
10143
// in a more elegant way.
@@ -121,12 +63,12 @@ public void beforeAll(ExtensionContext extensionContext) {
12163
});
12264
}
12365

124-
private static RandomFactory initializeRandomFactory(ExtensionContext extensionContext) {
125-
RandomFactory randomFactory =
66+
private static LongFunction<Random> initializeRandomFactory(ExtensionContext extensionContext) {
67+
var randomFactory =
12668
extensionContext
12769
.getConfigurationParameter(SysProps.TESTS_RANDOM_FACTORY.propertyKey)
128-
.map(RandomFactoryType::parse)
129-
.orElse(RandomFactoryType.XOROSHIRO_128_PLUS)
70+
.map(RandomInstanceFactory::parse)
71+
.orElse(RandomInstanceFactory.XOROSHIRO_128_PLUS)
13072
.get();
13173

13274
if (extensionContext

randomizedtesting-jupiter/src/main/java/com/carrotsearch/randomizedtesting/jupiter/internals/RandomizedContextImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import com.carrotsearch.randomizedtesting.jupiter.RandomizedContext;
66
import com.carrotsearch.randomizedtesting.jupiter.Seed;
77
import com.carrotsearch.randomizedtesting.jupiter.SeedChain;
8+
import com.carrotsearch.randomizedtesting.jupiter.SysProps;
89
import java.io.Closeable;
910
import java.io.IOException;
1011
import java.util.ArrayList;
1112
import java.util.Collections;
1213
import java.util.Locale;
1314
import java.util.Objects;
1415
import java.util.Random;
16+
import java.util.function.LongFunction;
1517
import org.junit.jupiter.api.extension.ExtensionContext;
1618

1719
public final class RandomizedContextImpl implements Closeable, RandomizedContext {
@@ -22,12 +24,12 @@ public final class RandomizedContextImpl implements Closeable, RandomizedContext
2224
private final SeedChain remainingSeedChain;
2325

2426
private final Random random;
25-
private final RandomFactory randomFactory;
27+
private final LongFunction<Random> randomFactory;
2628

2729
RandomizedContextImpl(
2830
String contextId,
2931
RandomizedContextImpl parent,
30-
RandomFactory randomFactory,
32+
LongFunction<Random> randomFactory,
3133
Seed seed,
3234
SeedChain remainingSeedChain) {
3335
this.contextId = contextId;
@@ -61,7 +63,7 @@ private RandomizedContextImpl getParent() {
6163

6264
/**
6365
* @return Returns the root seed (randomization source).
64-
* @see RandomizedContextExtension.SysProps#TESTS_SEED
66+
* @see SysProps#TESTS_SEED
6567
*/
6668
@Override
6769
public Seed getRootSeed() {

randomizedtesting-jupiter/src/test/java/com/carrotsearch/randomizedtesting/tests/F001_RandomizedContextInjection.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.carrotsearch.randomizedtesting.jupiter.Randomized;
77
import com.carrotsearch.randomizedtesting.jupiter.RandomizedContext;
88
import com.carrotsearch.randomizedtesting.jupiter.SeedChain;
9+
import com.carrotsearch.randomizedtesting.jupiter.SysProps;
910
import com.carrotsearch.randomizedtesting.jupiter.internals.RandomizedContextExtension;
1011
import com.carrotsearch.randomizedtesting.tests.infra.IgnoreInStandaloneRuns;
1112
import java.io.PrintWriter;
@@ -35,8 +36,7 @@ class TestFixedSeedInjection {
3536
public void testAllHooks() {
3637
collectExecutionResults(
3738
testKitBuilder(T1.class)
38-
.configurationParameter(
39-
RandomizedContextExtension.SysProps.TESTS_SEED.propertyKey, "dead:beef:cafe"))
39+
.configurationParameter(SysProps.TESTS_SEED.propertyKey, "dead:beef:cafe"))
4040
.results()
4141
.allEvents()
4242
.assertThatEvents()
@@ -162,8 +162,7 @@ public void identicalDerivedSeedWithTestFiltering() {
162162
var executionResult1 =
163163
collectExecutionResults(
164164
testKitBuilder(TestIdenticalRandomWithTestFiltering.class)
165-
.configurationParameter(
166-
RandomizedContextExtension.SysProps.TESTS_SEED.propertyKey, "deadbeed"));
165+
.configurationParameter(SysProps.TESTS_SEED.propertyKey, "deadbeed"));
167166

168167
// select just one of the tests and pick it by its unique id. then re-run it.
169168
// the seed/ random should be identical because the re-run starts from the same root
@@ -173,8 +172,7 @@ public void identicalDerivedSeedWithTestFiltering() {
173172
var executionResult2 =
174173
collectExecutionResults(
175174
testKitBuilder()
176-
.configurationParameter(
177-
RandomizedContextExtension.SysProps.TESTS_SEED.propertyKey, "deadbeed")
175+
.configurationParameter(SysProps.TESTS_SEED.propertyKey, "deadbeed")
178176
.selectors(DiscoverySelectors.selectUniqueId(pickedTest)));
179177

180178
String o1 = executionResult1.capturedOutput().get(pickedTest);

randomizedtesting-jupiter/src/test/java/com/carrotsearch/randomizedtesting/tests/F002_SeedRecovery.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.carrotsearch.randomizedtesting.jupiter.Randomized;
88
import com.carrotsearch.randomizedtesting.jupiter.RandomizedContext;
9+
import com.carrotsearch.randomizedtesting.jupiter.SysProps;
910
import com.carrotsearch.randomizedtesting.jupiter.internals.RandomizedContextExtension;
1011
import com.carrotsearch.randomizedtesting.tests.infra.IgnoreInStandaloneRuns;
1112
import java.util.stream.Stream;
@@ -27,8 +28,7 @@ class TestRootSeedIsAvailable {
2728
public void checkAtMethodLevel() {
2829
collectExecutionResults(
2930
testKitBuilder(AtTestLevel.class)
30-
.configurationParameter(
31-
RandomizedContextExtension.SysProps.TESTS_SEED.propertyKey, "dead"))
31+
.configurationParameter(SysProps.TESTS_SEED.propertyKey, "dead"))
3232
.results()
3333
.testEvents()
3434
.finished()
@@ -62,8 +62,7 @@ Stream<DynamicTest> dynamicTestsFromIterator() {
6262
private void runCheck(Check e) {
6363
collectExecutionResults(
6464
testKitBuilder(e.clazz())
65-
.configurationParameter(
66-
RandomizedContextExtension.SysProps.TESTS_SEED.propertyKey, "dead:beef:cafe"))
65+
.configurationParameter(SysProps.TESTS_SEED.propertyKey, "dead:beef:cafe"))
6766
.results()
6867
.allEvents()
6968
.finished()

0 commit comments

Comments
 (0)