Releases: SimY4/coregex
v1.4.1
This release is fully binary-compatible with 1.4.x release lineage.
This release widens support to more PBT testing frameworks and expands coverage of Scala versions up to 2.12 for existing integrations.
✨ [hedgehog-scala] New integration for hedgehog-scala framework.
✨ [scalacheck] Support for Scala 2.12.
✨ [zio-test] New integration for zio-test framework.
✨ [jetCheck] New integration for jetCheck framework.
🛠 [core] speed up regex numerics parsing
🛠 [core] fixed parsing for non-capturing group with flags (?idmsuxU-idmsuxU:)
🛠 [scalacheck] scalacheck no longer allows attaching generator implicits to all subtypes of String. Only String can be used for generation.
🧰 [kotest] kotest updated to 6.0.5
🧰 [scalacheck] scalacheck updated to 1.19.0
v1.4.0
This release introduces binary-incompatible changes between the core library and testing framework extensions. These breaking changes do not affect end users.
The 1.4.0 release marks an important milestone for this project. Starting with this version, I consider the library feature-complete, supporting enough regex constructs to cover most practical string generation use cases (if you find something missing, talk to me—I’d like to know your use case). In fact, I strongly believe this library supports more regex syntax than any other competing solution in this space.
The final missing piece was the ability to generate strings from regex patterns containing lookahead and lookbehind clauses. You might not think this is necessary, but there are many cases where they become essential. For example, \b (word boundary) can now be implemented through lookaheads and lookbehinds. String length limits like (?!.{32,}).+ can only be implemented using negative lookahead, and so on. Several new regex metacharacters were implemented and a few more were re-implemented via lookaheads and lookbehinds: \A \b \B \R \z \Z ^ $.
💥 [core] Coregex.shrink() now returns Stream<Coregex> instead of Optional<Coregex>.
🛠 [core] support for lookahead (?=), negative lookahead (?!), lookbehind (?<=) and negative lookbehind (?<!) regex contructs.
🛠 [core] support for \A \b \B \z \Z metacharacters (desugared to lookahead and lookbehind predicates).
🛠 [core] support for \R
🧰 [kotest] kotest updated to 6.0.1
v1.3.0
This release carries binary incompatible changes in functional-java and Kotest integrations.
For functional-java APIs have been adjusted to be more idiomatic to the framework. Read the deets below for more info.
For Kotest, Kotest introduced ABI breaking changes in their 6.0 release so you'll need to update this dependency when updating from Kotest 5 to Kotest 6. Minimal required version for Kotest module has also being bumped from 8 to 11. This release has no other changes.
💥 [functional-java] CoregexArbitrary.gen(String), CoregexArbitrary.gen(String, int), CoregexArbitrary.shrink(String) and CoregexArbitrary.shrink(String, int) were replaced with CoregexArbitrary.gen(Pattern) and CoregexArbitrary.shrink(Pattern) to get rid of possibility of failure within arbitrary constructor.
🛠 [functional-java] new CoregexArbitrary.arbitrary(Pattern) API that returns both gen and shrink instance as a pair.
🧰 [kotest] kotest updated to 6.0.0
🧰 [vavr-test] vavr-test updated to 0.10.7
v1.2.0
This release contains multiple binary breaking changes. Most of them are justified with significant performance gains that wouldn't be possible otherwise. The rest of them were removals of previously deprecated features, pushing for more idiomatic ways of using this library.
💥 [core] Coregex#generate(RNG) API changed to Coregex#generate(long). RNG interface was removed.
💥 [core] Coregex#minLength() and Coregex#maxLength() were removed from public API. This change is related to overall reimplementation of shrinking logic.
💥 [core] Coregex#sized(int), Coregex$Sized and Coregex#simplify() were removed. This was a weird hack that is no longer necessary.
💥 [core] Coregex$Group API constructors changed to follow regex patterns more closely.
💥 [core] Coregex$Literal was removed. Coregex#literal(String, int) method was introduced to create analogous Coregex.
💥 [core] Coregex$Set was removed. Set class now implements Coregex directly.
💥 [core] Pair class was removed. Pair was dropped from all APIs and no longer being used.
💥 [core] Set#sample(int) now returns OptionalInt to highlight it's partial nature.
💥 [core] Set#shrink() now returns Optional<Coregex>. Set directly implements Coregex and now shared the same contract for shrinking.
💥 [functionaljava-quickcheck] CoregexArbitrary#of methods were renamed to CoregexArbitrary#gen to accommodate for shrinking support
💥 [jqwik, kotest] CoregexArbitrary#withSize and CoregexArbitrary#withEdgecases methods were removed. Size as a concept was removed from core and there is a native way to add edgecases to any arbitrary - no need to roll our own
💥 [scalacheck, vavr-test] CoregexGen and CoregexGenenerator class methods no longer take size due to size as a concept was removed from core
🛠 [core] support for \n and \k back references
✨ [functionaljava-quickcheck] shrinking support
🛠 [kotest] fixed infinite loop in shrinking logic
🧰 [jqwik] jqwik updated to 1.9.3
🧰 [vavr-test] vavr-test updated to 0.10.6
1.1.0 functionaljava-quickcheck
✨ [functionaljava-quickcheck] initial functionaljava quickcheck support
🛠 [core] support for non-capturing groups with given flags syntax: (?idmsux-idmsux:X).
🛠 [core] support for \S non-space characters metachar syntax.
🛠 [core] support for \0n \0nn and \0mnn characters with octal value.
🛠 [core] for JDK 9+ support for \N{name} character with Unicode character name.
🧰 [jqwik] jqwik updated to 1.9.2