A handy utility for generating strings that match given regular expression criteria.
You can use this library directly by compiling an instance of coregex from any given regular expression pattern:
var pattern = Pattern.compile("[a-zA-Z]{3}");
var coregex = Coregex.from(pattern);
Having an instance of coregex, you can ask it to generate a string matching original regular expression. At any given time this should be true:
var seed = ThreadLocalRandom.current().nextLong();
assert pattern.matcher(coregex.generate(seed)).matches();
Given the library is primarily intended to be used in property based testing, it comes with a set of integrations for popular property based testing frameworks.
Include the following dependency into your project:
testImplementation "com.github.simy4.coregex:coregex-functionaljava-quickcheck"
Use the provided CoregexArbirary
class to generate a string that would match the regular expression predicate:
@RunWith(PropertyTestRunner.class)
public class MyTest {
private static final Pattern PATTERN = Pattern.compile("[a-zA-Z]{3}");
public Property myProperty() {
return property(CoregexArbitrary.gen(PATTERN), CoregexArbitrary.shrink(PATTERN), str -> prop(3 == str.length()));
}
}
Include the following dependency into your project:
testImplementation "com.github.simy4.coregex:coregex-jqwik"
Use the provided Regex
annotation to generate a string that would match the regular expression predicate:
class MyTest {
@Property
void myProperty(@ForAll @Regex("[a-zA-Z]{3}") String str) {
assertThat(str).hasLength(3);
}
}
Include the following dependency into your project:
testImplementation "com.github.simy4.coregex:coregex-junit-quickcheck"
Use the provided Regex
annotation to generate a string that would match the regular expression predicate:
@RunWith(JUnitQuickcheck.class)
public class MyTest {
@Property
public void myProperty(@Regex("[a-zA-Z]{3}") String str) {
assertThat(str).hasLength(3);
}
}
Include the following dependency into your project:
testImplementation "com.github.simy4.coregex:coregex-kotest"
Use the provided CoregexArbirary
class to generate a string that would match the regular expression predicate:
class MyTest : DescribeSpec({
describe("my property") {
it("should hold") {
checkAll(CoregexArbitrary.of("[a-zA-Z]{3}")) { str ->
str.length shouldBe 3
}
}
}
})
Include the following dependency into your project:
libraryDependencies ++= Seq("com.github.simy4.coregex" %% "coregex-scalacheck" % Test)
Use the provided CoregexInstances
trait to constrain string arbitraries:
object MySpecification extends Properties("MySpecification") with CoregexInstances {
property("my property") = forAll { (str: StringMatching["[a-zA-Z]{3}"]) =>
3 == str.length
}
}
Include the following dependency into your project:
testImplementation "com.github.simy4.coregex:coregex-vavr-test"
Use the provided CoregexArbirary
class to generate a string that would match the regular expression predicate:
class MyTest {
@Test
void myProperty() {
Property.def("my property")
.forAll(CoregexArbitrary.of("[a-zA-Z]{3}"))
.suchThat(str -> 3 == str.length())
.check();
}
}
Include the following dependency into your project:
testImplementation "com.github.simy4.coregex:coregex-zio-test"
Use the provided CoregexGen
class to generate a string that would match the regular expression predicate:
object MySpec extends ZIOSpecDefault {
def spec = suite("my spec")(
test("my property") {
check(CoregexGen.from(Pattern.compile("[a-zA-Z]{3}"))) { str =>
assertTrue(str.length == 3)
}
}
)
}