Skip to content

Commit 3fa4eaa

Browse files
committed
Shrinking support for Scala 2.12.
1 parent ad7da07 commit 3fa4eaa

File tree

5 files changed

+64
-17
lines changed

5 files changed

+64
-17
lines changed

build.sbt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,19 @@ lazy val kotest = (project in file("kotest"))
159159

160160
lazy val scalacheck = (project in file("scalacheck"))
161161
.settings(
162-
name := "scalacheck",
163-
moduleName := "coregex-scalacheck",
164-
description := "ScalaCheck bindings for coregex library.",
165-
headerEndYear := Some(2025),
166-
libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.19.0" % Provided,
167-
crossScalaVersions := supportedScalaVersions,
162+
name := "scalacheck",
163+
moduleName := "coregex-scalacheck",
164+
description := "ScalaCheck bindings for coregex library.",
165+
headerEndYear := Some(2025),
166+
libraryDependencies ++= (CrossVersion.partialVersion(scalaVersion.value) match {
167+
case Some((2, 13) | (3, _)) => Seq("org.scalacheck" %% "scalacheck" % "1.19.0" % Provided)
168+
case Some((2, 12)) =>
169+
Seq(
170+
"org.scala-lang.modules" %% "scala-java8-compat" % "1.0.2",
171+
"org.scalacheck" %% "scalacheck" % "1.19.0" % Provided
172+
)
173+
}),
174+
crossScalaVersions := supportedScalaVersions,
168175
Compile / unmanagedSourceDirectories ++= (CrossVersion.partialVersion(scalaVersion.value) match {
169176
case Some((2, 13) | (3, _)) => Seq("scala-2.13+")
170177
case Some((2, 12)) => Seq.empty
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.simy4.coregex
2+
package scalacheck
3+
4+
import core.Coregex
5+
import org.scalacheck.Shrink
6+
7+
private[scalacheck] trait CoregexGenVersionSpecific {
8+
import scala.compat.java8.StreamConverters._
9+
10+
def shrinkFor(coregex: Coregex): Shrink[String] = {
11+
val shrinks = coregex.shrink().toScala[Stream]
12+
Shrink { larger =>
13+
shrinks.map(coregex => coregex.generate(larger.length.toLong)).filter(_.length < larger.length)
14+
}
15+
}
16+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright 2021-2025 Alex Simkin
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.github.simy4.coregex
18+
package scalacheck
19+
20+
import core.Coregex
21+
import org.scalacheck.Shrink
22+
23+
private[scalacheck] trait CoregexGenVersionSpecific {
24+
import scala.jdk.StreamConverters._
25+
26+
def shrinkFor(coregex: Coregex): Shrink[String] = {
27+
val shrinks = coregex.shrink().toScala(LazyList)
28+
Shrink.withLazyList { larger =>
29+
shrinks.map(coregex => coregex.generate(larger.length.toLong)).filter(_.length < larger.length)
30+
}
31+
}
32+
}

scalacheck/src/main/scala-2.13+/com/github/simy4/coregex/scalacheck/CoregexInstances.scala

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ import org.scalacheck.{ Arbitrary, Gen, Shrink }
2323
import java.util.regex.Pattern
2424

2525
trait CoregexInstances {
26-
import scala.jdk.CollectionConverters._
27-
2826
type StringMatching[Regex <: String with Singleton] <: String
2927

3028
implicit def arbitraryStringMatchingRegexStringWithSingleton[
@@ -34,12 +32,6 @@ trait CoregexInstances {
3432

3533
implicit def shrinkStringMatchingRegexStringWithSingleton[
3634
Regex <: String with Singleton: ValueOf
37-
]: Shrink[StringMatching[Regex]] = {
38-
val shrinks = Coregex.from(Pattern.compile(valueOf[Regex])).shrink().iterator().asScala.to(LazyList)
39-
Shrink.withLazyList { larger =>
40-
shrinks
41-
.map(coregex => coregex.generate(larger.length.toLong).asInstanceOf[StringMatching[Regex]])
42-
.filter(string => string.length < larger.length)
43-
}
44-
}
35+
]: Shrink[StringMatching[Regex]] =
36+
CoregexGen.shrinkFor(Coregex.from(Pattern.compile(valueOf[Regex]))).asInstanceOf[Shrink[StringMatching[Regex]]]
4537
}

scalacheck/src/main/scala/com/github/simy4/coregex/scalacheck/CoregexGen.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import org.scalacheck.Gen
2323
import java.util.regex.Pattern
2424
import scala.util.matching.Regex
2525

26-
object CoregexGen {
26+
object CoregexGen extends CoregexGenVersionSpecific {
2727
def fromRegex(regex: Regex): Gen[String] = fromPattern(regex.pattern)
2828

2929
def fromPattern(regex: Pattern): Gen[String] = apply(Coregex.from(regex))

0 commit comments

Comments
 (0)