From e85b1654bffde2efc1036ef7d1080db5f681a1c0 Mon Sep 17 00:00:00 2001 From: i10416 Date: Fri, 18 Feb 2022 20:10:48 +0900 Subject: [PATCH 1/9] update: use java.util.BitSet on js platform scala.js supports java.util.BitSet since 1.9.0 https://www.scala-js.org/news/2022/02/14/announcing-scalajs-1.9.0/ --- .../js/src/main/scala/cats/parse/BitSet.scala | 69 ------------------- .../src/main/scala/cats/parse/BitSet.scala | 3 - .../test/scala/cats/parse/BitSetTest.scala | 6 -- .../scala/cats/parse/LocationMapTest.scala | 2 +- .../test/scala/cats/parse/ParserTest.scala | 2 +- .../test/scala/cats/parse/RadixNodeTest.scala | 2 +- project/plugins.sbt | 2 +- 7 files changed, 4 insertions(+), 82 deletions(-) delete mode 100644 core/js/src/main/scala/cats/parse/BitSet.scala rename core/{jvm => shared}/src/main/scala/cats/parse/BitSet.scala (96%) diff --git a/core/js/src/main/scala/cats/parse/BitSet.scala b/core/js/src/main/scala/cats/parse/BitSet.scala deleted file mode 100644 index 3e14f75b..00000000 --- a/core/js/src/main/scala/cats/parse/BitSet.scala +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2021 Typelevel - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package cats.parse - -import scala.collection.mutable.BitSet - -object BitSetUtil { - type Tpe = BitSet - - @inline final val isScalaJs = true - @inline final val isScalaJvm = false - - @inline final def isSet(b: BitSet, idx: Int): Boolean = - (idx >= 0) && b(idx) - - def bitSetFor(charArray: Array[Char]): BitSet = { - val min = charArray(0).toInt - val bs = new BitSet(charArray(charArray.length - 1).toInt + 1 - min) - var idx = 0 - while (idx < charArray.length) { - bs += charArray(idx).toInt - min - idx += 1 - } - - bs - } - - def isSingleton(t: Tpe): Boolean = t.size == 1 - - def union(bs: List[(Int, BitSet)]): Iterable[Char] = - union(bs.iterator) - - // what are all the Chars in these bitsets - def union(bs: Iterator[(Int, BitSet)]): Iterable[Char] = { - def toIter(m: Int, bs: BitSet): Iterator[Char] = - bs.iterator.map { i => (i + m).toChar } ++ Iterator.single(m.toChar) - - bs.flatMap { case (m, bs) => toIter(m, bs) }.toSet - } - - def bitSetForRange(count: Int): BitSet = { - val bs = new BitSet(count) - var cur = 0 - while (cur < count) { - bs += cur - cur += 1 - } - bs - } -} diff --git a/core/jvm/src/main/scala/cats/parse/BitSet.scala b/core/shared/src/main/scala/cats/parse/BitSet.scala similarity index 96% rename from core/jvm/src/main/scala/cats/parse/BitSet.scala rename to core/shared/src/main/scala/cats/parse/BitSet.scala index b84674cb..4d260295 100644 --- a/core/jvm/src/main/scala/cats/parse/BitSet.scala +++ b/core/shared/src/main/scala/cats/parse/BitSet.scala @@ -26,9 +26,6 @@ import java.util.BitSet object BitSetUtil { type Tpe = BitSet - @inline final val isScalaJs = false - @inline final val isScalaJvm = true - @inline final def isSet(b: BitSet, idx: Int): Boolean = // BitSet can't deal with negatives, so mask those out b.get(idx & Int.MaxValue) diff --git a/core/shared/src/test/scala/cats/parse/BitSetTest.scala b/core/shared/src/test/scala/cats/parse/BitSetTest.scala index d2c989fa..a3915e32 100644 --- a/core/shared/src/test/scala/cats/parse/BitSetTest.scala +++ b/core/shared/src/test/scala/cats/parse/BitSetTest.scala @@ -24,12 +24,6 @@ package cats.parse import org.scalacheck.Prop.forAll class BitSetTest extends munit.ScalaCheckSuite { - test("isScalaJs/isScalaJvm is consistent") { - // This will need to be updated if we ever add scala-native - assert(!(BitSetUtil.isScalaJs && BitSetUtil.isScalaJvm)) - assert(BitSetUtil.isScalaJs || BitSetUtil.isScalaJvm) - assert(BitSetUtil.isScalaJs ^ BitSetUtil.isScalaJvm) - } property("BitSetUtil union works") { forAll { (cs: List[List[Char]]) => diff --git a/core/shared/src/test/scala/cats/parse/LocationMapTest.scala b/core/shared/src/test/scala/cats/parse/LocationMapTest.scala index a02f5dd2..1de4dc8b 100644 --- a/core/shared/src/test/scala/cats/parse/LocationMapTest.scala +++ b/core/shared/src/test/scala/cats/parse/LocationMapTest.scala @@ -26,7 +26,7 @@ import Prop.forAll class LocationMapTest extends munit.ScalaCheckSuite { - val tests: Int = if (BitSetUtil.isScalaJs) 50 else 20000 + val tests: Int = 20000 override def scalaCheckTestParameters = super.scalaCheckTestParameters diff --git a/core/shared/src/test/scala/cats/parse/ParserTest.scala b/core/shared/src/test/scala/cats/parse/ParserTest.scala index 920e5ac6..1a44a9a5 100644 --- a/core/shared/src/test/scala/cats/parse/ParserTest.scala +++ b/core/shared/src/test/scala/cats/parse/ParserTest.scala @@ -600,7 +600,7 @@ class ParserTest extends munit.ScalaCheckSuite { import ParserGen.{arbParser0, arbParser, biasSmall} - val tests: Int = if (BitSetUtil.isScalaJs) 50 else 2000 + val tests: Int = 2000 override def scalaCheckTestParameters = super.scalaCheckTestParameters diff --git a/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala b/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala index 8b6669af..2e4e3dbc 100644 --- a/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala +++ b/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala @@ -25,7 +25,7 @@ import org.scalacheck.{Gen, Prop} import org.scalacheck.Prop.forAll class RadixNodeTest extends munit.ScalaCheckSuite { - val tests: Int = if (BitSetUtil.isScalaJs) 50 else 20000 + val tests: Int = 20000 override def scalaCheckTestParameters = super.scalaCheckTestParameters diff --git a/project/plugins.sbt b/project/plugins.sbt index 90fcde32..533f9793 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,7 +2,7 @@ addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") addSbtPlugin("com.lightbend.paradox" % "sbt-paradox" % "0.9.2") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.1.0") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.8.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.9.0") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.3") addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3") addSbtPlugin("org.typelevel" % "sbt-typelevel" % "0.4.4") From aad44b178ebfc581225411bcd333b3263be7d01e Mon Sep 17 00:00:00 2001 From: i10416 Date: Sat, 19 Feb 2022 17:40:30 +0900 Subject: [PATCH 2/9] switch test iteration based on build platform --- build.sbt | 18 ++++++++++++++++-- .../src/test/scala/cats/parse/BitSetTest.scala | 1 - .../src/test/scala/cats/parse/ParserTest.scala | 2 +- .../test/scala/cats/parse/RadixNodeTest.scala | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/build.sbt b/build.sbt index 5696119a..d9a0e0f5 100644 --- a/build.sbt +++ b/build.sbt @@ -108,7 +108,9 @@ lazy val docs = project .withRepository(uri("https://github.com/typelevel/cats-parse")) ) .dependsOn(coreJVM, bench) - +val testUtilsFileName = "TestUtils.scala" +val testUtilsTemplate = (iteration: Int, iterationLarge: Int) => + s"package cats.parse\nobject TestUtils { def iteration:Int = $iteration;def iterationLarge = $iterationLarge; }" lazy val core = crossProject(JSPlatform, JVMPlatform) .crossType(CrossType.Full) .settings( @@ -149,9 +151,21 @@ lazy val core = crossProject(JSPlatform, JVMPlatform) else Nil } ) + .jvmSettings( + Test / sourceGenerators += Def.task { + val file = (Test / sourceManaged).value / testUtilsFileName + IO.write(file, testUtilsTemplate(2000, 20000)) + Seq(file) + }.taskValue + ) .jsSettings( crossScalaVersions := (ThisBuild / crossScalaVersions).value.filterNot(_.startsWith("2.11")), - coverageEnabled := false + coverageEnabled := false, + Test / sourceGenerators += Def.task { + val file = (Test / sourceManaged).value / testUtilsFileName + IO.write(file, testUtilsTemplate(50, 50)) + Seq(file) + }.taskValue ) lazy val coreJVM = core.jvm.settings(jvmVersionSettings) diff --git a/core/shared/src/test/scala/cats/parse/BitSetTest.scala b/core/shared/src/test/scala/cats/parse/BitSetTest.scala index a3915e32..12fc2d4c 100644 --- a/core/shared/src/test/scala/cats/parse/BitSetTest.scala +++ b/core/shared/src/test/scala/cats/parse/BitSetTest.scala @@ -24,7 +24,6 @@ package cats.parse import org.scalacheck.Prop.forAll class BitSetTest extends munit.ScalaCheckSuite { - property("BitSetUtil union works") { forAll { (cs: List[List[Char]]) => val arys = cs.iterator.filter(_.nonEmpty).map(_.toArray.sorted) diff --git a/core/shared/src/test/scala/cats/parse/ParserTest.scala b/core/shared/src/test/scala/cats/parse/ParserTest.scala index 1a44a9a5..47e6c32d 100644 --- a/core/shared/src/test/scala/cats/parse/ParserTest.scala +++ b/core/shared/src/test/scala/cats/parse/ParserTest.scala @@ -600,7 +600,7 @@ class ParserTest extends munit.ScalaCheckSuite { import ParserGen.{arbParser0, arbParser, biasSmall} - val tests: Int = 2000 + val tests: Int = TestUtils.iteration override def scalaCheckTestParameters = super.scalaCheckTestParameters diff --git a/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala b/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala index 2e4e3dbc..b3080ccf 100644 --- a/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala +++ b/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala @@ -25,7 +25,7 @@ import org.scalacheck.{Gen, Prop} import org.scalacheck.Prop.forAll class RadixNodeTest extends munit.ScalaCheckSuite { - val tests: Int = 20000 + val tests: Int = TestUtils.iterationLarge override def scalaCheckTestParameters = super.scalaCheckTestParameters From 7c6097e004c1ee4a0a014cd80ca35e0be65bd07c Mon Sep 17 00:00:00 2001 From: i10416 Date: Thu, 3 Mar 2022 02:23:24 +0900 Subject: [PATCH 3/9] put platform check fields back for bincompat Removing isScalaJs/isScalaJVM breaks binary compatibility. It is unlikely that anyone uses this API, but in order to avoid bumping minor version, we put platform check fields back to BitSetUtil for now. --- core/shared/src/main/scala/cats/parse/BitSet.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/shared/src/main/scala/cats/parse/BitSet.scala b/core/shared/src/main/scala/cats/parse/BitSet.scala index 4d260295..f5c0a4b4 100644 --- a/core/shared/src/main/scala/cats/parse/BitSet.scala +++ b/core/shared/src/main/scala/cats/parse/BitSet.scala @@ -22,9 +22,12 @@ package cats.parse import java.util.BitSet - object BitSetUtil { type Tpe = BitSet + @deprecated("", "0.3.7") + @inline final val isScalaJs = false + @deprecated("", "0.3.7") + @inline final val isScalaJvm = false @inline final def isSet(b: BitSet, idx: Int): Boolean = // BitSet can't deal with negatives, so mask those out From 8a4c6e62a1d4e25f6ef32eddf7cfc75c7039922d Mon Sep 17 00:00:00 2001 From: i10416 Date: Thu, 3 Mar 2022 03:09:35 +0900 Subject: [PATCH 4/9] exclude internal api from bincompat issue reports --- build.sbt | 3 +-- project/MimaExclusionRules.scala | 13 +++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 project/MimaExclusionRules.scala diff --git a/build.sbt b/build.sbt index d9a0e0f5..9d19d166 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,6 @@ import com.typesafe.tools.mima.core._ import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType} import Dependencies._ - addCommandAlias("fmt", "; scalafmtAll; scalafmtSbt") addCommandAlias("fmtCheck", "; scalafmtCheckAll; scalafmtSbtCheck") @@ -149,7 +148,7 @@ lazy val core = crossProject(JSPlatform, JVMPlatform) ProblemFilters.exclude[FinalClassProblem]("cats.parse.RadixNode") ) else Nil - } + } ++ MimaExclusionRules.ParserImpl ) .jvmSettings( Test / sourceGenerators += Def.task { diff --git a/project/MimaExclusionRules.scala b/project/MimaExclusionRules.scala new file mode 100644 index 00000000..c00ffa21 --- /dev/null +++ b/project/MimaExclusionRules.scala @@ -0,0 +1,13 @@ +import com.typesafe.tools.mima.core.ProblemFilters +import com.typesafe.tools.mima.core.IncompatibleMethTypeProblem +import com.typesafe.tools.mima.core.IncompatibleResultTypeProblem +object MimaExclusionRules { + val ParserImpl = Seq( + "cats.parse.Parser#Impl#CharIn.copy", + "cats.parse.Parser#Impl#CharIn.apply", + "cats.parse.Parser#Impl#CharIn.this" + ).map(ProblemFilters.exclude[IncompatibleMethTypeProblem](_)) ++ Seq( + "cats.parse.Parser#Impl#CharIn.copy$default$2", + "cats.parse.Parser#Impl#CharIn.bitSet" + ).map(ProblemFilters.exclude[IncompatibleResultTypeProblem](_)) +} From 3168416abdf1c7a68cd63a9b591ffcbb421e98ad Mon Sep 17 00:00:00 2001 From: i10416 Date: Thu, 3 Mar 2022 12:45:59 +0900 Subject: [PATCH 5/9] tweak --- build.sbt | 11 ++------- .../js/src/main/scala/cats/parse/BitSet.scala | 24 +++++++++++++++++++ .../src/main/scala/cats/parse/BitSet.scala | 24 +++++++++++++++++++ .../{BitSet.scala => BitSetCompat.scala} | 9 ++++--- .../scala/cats/parse/LocationMapTest.scala | 2 +- .../test/scala/cats/parse/ParserTest.scala | 2 +- .../test/scala/cats/parse/RadixNodeTest.scala | 2 +- 7 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 core/js/src/main/scala/cats/parse/BitSet.scala create mode 100644 core/jvm/src/main/scala/cats/parse/BitSet.scala rename core/shared/src/main/scala/cats/parse/{BitSet.scala => BitSetCompat.scala} (93%) diff --git a/build.sbt b/build.sbt index dca6d5fa..7e271a2a 100644 --- a/build.sbt +++ b/build.sbt @@ -107,9 +107,7 @@ lazy val docs = project .withRepository(uri("https://github.com/typelevel/cats-parse")) ) .dependsOn(coreJVM, bench) -val testUtilsFileName = "TestUtils.scala" -val testUtilsTemplate = (iteration: Int, iterationLarge: Int) => - s"package cats.parse\nobject TestUtils { def iteration:Int = $iteration;def iterationLarge = $iterationLarge; }" + lazy val core = crossProject(JSPlatform, JVMPlatform) .crossType(CrossType.Full) .settings( @@ -155,12 +153,7 @@ lazy val core = crossProject(JSPlatform, JVMPlatform) ) .jsSettings( crossScalaVersions := (ThisBuild / crossScalaVersions).value.filterNot(_.startsWith("2.11")), - coverageEnabled := false, - Test / sourceGenerators += Def.task { - val file = (Test / sourceManaged).value / testUtilsFileName - IO.write(file, testUtilsTemplate(50, 50)) - Seq(file) - }.taskValue + coverageEnabled := false ) lazy val coreJVM = core.jvm.settings(jvmVersionSettings) diff --git a/core/js/src/main/scala/cats/parse/BitSet.scala b/core/js/src/main/scala/cats/parse/BitSet.scala new file mode 100644 index 00000000..b8d329b8 --- /dev/null +++ b/core/js/src/main/scala/cats/parse/BitSet.scala @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.parse + +object BitSetUtil extends BitSetUtilCompat(true, false) diff --git a/core/jvm/src/main/scala/cats/parse/BitSet.scala b/core/jvm/src/main/scala/cats/parse/BitSet.scala new file mode 100644 index 00000000..a542b234 --- /dev/null +++ b/core/jvm/src/main/scala/cats/parse/BitSet.scala @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Typelevel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package cats.parse + +object BitSetUtil extends BitSetUtilCompat(false, true) diff --git a/core/shared/src/main/scala/cats/parse/BitSet.scala b/core/shared/src/main/scala/cats/parse/BitSetCompat.scala similarity index 93% rename from core/shared/src/main/scala/cats/parse/BitSet.scala rename to core/shared/src/main/scala/cats/parse/BitSetCompat.scala index f5c0a4b4..039d434b 100644 --- a/core/shared/src/main/scala/cats/parse/BitSet.scala +++ b/core/shared/src/main/scala/cats/parse/BitSetCompat.scala @@ -22,12 +22,11 @@ package cats.parse import java.util.BitSet -object BitSetUtil { +private[parse] abstract class BitSetUtilCompat( + @inline final val isScalaJs: Boolean, + @inline final val isScalaJvm: Boolean +) { type Tpe = BitSet - @deprecated("", "0.3.7") - @inline final val isScalaJs = false - @deprecated("", "0.3.7") - @inline final val isScalaJvm = false @inline final def isSet(b: BitSet, idx: Int): Boolean = // BitSet can't deal with negatives, so mask those out diff --git a/core/shared/src/test/scala/cats/parse/LocationMapTest.scala b/core/shared/src/test/scala/cats/parse/LocationMapTest.scala index 1de4dc8b..a02f5dd2 100644 --- a/core/shared/src/test/scala/cats/parse/LocationMapTest.scala +++ b/core/shared/src/test/scala/cats/parse/LocationMapTest.scala @@ -26,7 +26,7 @@ import Prop.forAll class LocationMapTest extends munit.ScalaCheckSuite { - val tests: Int = 20000 + val tests: Int = if (BitSetUtil.isScalaJs) 50 else 20000 override def scalaCheckTestParameters = super.scalaCheckTestParameters diff --git a/core/shared/src/test/scala/cats/parse/ParserTest.scala b/core/shared/src/test/scala/cats/parse/ParserTest.scala index 532f41af..fe63f0e2 100644 --- a/core/shared/src/test/scala/cats/parse/ParserTest.scala +++ b/core/shared/src/test/scala/cats/parse/ParserTest.scala @@ -610,7 +610,7 @@ class ParserTest extends munit.ScalaCheckSuite { import ParserGen.{arbParser0, arbParser, biasSmall, genString, arbString} - val tests: Int = TestUtils.iteration + val tests: Int = if (BitSetUtil.isScalaJs) 50 else 2000 override def scalaCheckTestParameters = super.scalaCheckTestParameters diff --git a/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala b/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala index b3080ccf..8b6669af 100644 --- a/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala +++ b/core/shared/src/test/scala/cats/parse/RadixNodeTest.scala @@ -25,7 +25,7 @@ import org.scalacheck.{Gen, Prop} import org.scalacheck.Prop.forAll class RadixNodeTest extends munit.ScalaCheckSuite { - val tests: Int = TestUtils.iterationLarge + val tests: Int = if (BitSetUtil.isScalaJs) 50 else 20000 override def scalaCheckTestParameters = super.scalaCheckTestParameters From b74a9427994bae83df257390bb23c400d0aebbeb Mon Sep 17 00:00:00 2001 From: i10416 Date: Wed, 9 Mar 2022 20:31:12 +0900 Subject: [PATCH 6/9] Merge branch 'main' into use-java-bitset-from-scalajs-1.9.0#381 --- .github/workflows/ci.yml | 44 ++++++++++++++++++++++++++++++++++++---- project/plugins.sbt | 2 +- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6bb657d5..56738bc4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,12 +37,21 @@ jobs: with: fetch-depth: 0 + - name: Download Java (temurin@8) + id: download-java-temurin-8 + if: matrix.java == 'temurin@8' + uses: typelevel/download-java@v1 + with: + distribution: temurin + java-version: 8 + - name: Setup Java (temurin@8) if: matrix.java == 'temurin@8' uses: actions/setup-java@v2 with: - distribution: temurin + distribution: jdkfile java-version: 8 + jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }} - name: Cache sbt uses: actions/cache@v2 @@ -96,12 +105,21 @@ jobs: with: fetch-depth: 0 + - name: Download Java (temurin@8) + id: download-java-temurin-8 + if: matrix.java == 'temurin@8' + uses: typelevel/download-java@v1 + with: + distribution: temurin + java-version: 8 + - name: Setup Java (temurin@8) if: matrix.java == 'temurin@8' uses: actions/setup-java@v2 with: - distribution: temurin + distribution: jdkfile java-version: 8 + jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }} - name: Cache sbt uses: actions/cache@v2 @@ -189,12 +207,21 @@ jobs: - name: Checkout current branch (fast) uses: actions/checkout@v2 + - name: Download Java (temurin@8) + id: download-java-temurin-8 + if: matrix.java == 'temurin@8' + uses: typelevel/download-java@v1 + with: + distribution: temurin + java-version: 8 + - name: Setup Java (temurin@8) if: matrix.java == 'temurin@8' uses: actions/setup-java@v2 with: - distribution: temurin + distribution: jdkfile java-version: 8 + jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }} - name: Cache sbt uses: actions/cache@v2 @@ -222,12 +249,21 @@ jobs: - name: Checkout current branch (fast) uses: actions/checkout@v2 + - name: Download Java (temurin@8) + id: download-java-temurin-8 + if: matrix.java == 'temurin@8' + uses: typelevel/download-java@v1 + with: + distribution: temurin + java-version: 8 + - name: Setup Java (temurin@8) if: matrix.java == 'temurin@8' uses: actions/setup-java@v2 with: - distribution: temurin + distribution: jdkfile java-version: 8 + jdkFile: ${{ steps.download-java-temurin-8.outputs.jdkFile }} - name: Cache sbt uses: actions/cache@v2 diff --git a/project/plugins.sbt b/project/plugins.sbt index 6b46f658..038d3362 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -5,7 +5,7 @@ addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.1.0") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.9.0") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.3") addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.3") -addSbtPlugin("org.typelevel" % "sbt-typelevel" % "0.4.5") +addSbtPlugin("org.typelevel" % "sbt-typelevel" % "0.4.6") addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.1") addSbtPlugin("io.github.jonas" % "sbt-paradox-material-theme" % "0.6.0") addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.4.1") From cbdddc2d1f9bd638defab028e0b4ab3470f18706 Mon Sep 17 00:00:00 2001 From: i10416 Date: Wed, 9 Mar 2022 20:31:34 +0900 Subject: [PATCH 7/9] rebase change --- core/shared/src/test/scala/cats/parse/BitSetTest.scala | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/shared/src/test/scala/cats/parse/BitSetTest.scala b/core/shared/src/test/scala/cats/parse/BitSetTest.scala index 12fc2d4c..d2c989fa 100644 --- a/core/shared/src/test/scala/cats/parse/BitSetTest.scala +++ b/core/shared/src/test/scala/cats/parse/BitSetTest.scala @@ -24,6 +24,13 @@ package cats.parse import org.scalacheck.Prop.forAll class BitSetTest extends munit.ScalaCheckSuite { + test("isScalaJs/isScalaJvm is consistent") { + // This will need to be updated if we ever add scala-native + assert(!(BitSetUtil.isScalaJs && BitSetUtil.isScalaJvm)) + assert(BitSetUtil.isScalaJs || BitSetUtil.isScalaJvm) + assert(BitSetUtil.isScalaJs ^ BitSetUtil.isScalaJvm) + } + property("BitSetUtil union works") { forAll { (cs: List[List[Char]]) => val arys = cs.iterator.filter(_.nonEmpty).map(_.toArray.sorted) From 2859f0c80fe3f68f0ca435736651bea1bd651264 Mon Sep 17 00:00:00 2001 From: i10416 Date: Wed, 9 Mar 2022 20:57:59 +0900 Subject: [PATCH 8/9] supress bincompat wornings for bitsetutils --- build.sbt | 2 +- core/shared/src/main/scala/cats/parse/BitSetCompat.scala | 1 + core/shared/src/test/scala/cats/parse/BitSetTest.scala | 1 + project/MimaExclusionRules.scala | 9 ++++++++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 7e271a2a..452adcda 100644 --- a/build.sbt +++ b/build.sbt @@ -149,7 +149,7 @@ lazy val core = crossProject(JSPlatform, JVMPlatform) ProblemFilters.exclude[IncompatibleResultTypeProblem]("cats.parse.Parser#State.error") ) else Nil - } ++ MimaExclusionRules.ParserImpl + } ++ MimaExclusionRules.parserImpl ++ MimaExclusionRules.bitSetUtil ) .jsSettings( crossScalaVersions := (ThisBuild / crossScalaVersions).value.filterNot(_.startsWith("2.11")), diff --git a/core/shared/src/main/scala/cats/parse/BitSetCompat.scala b/core/shared/src/main/scala/cats/parse/BitSetCompat.scala index 039d434b..ebec94d8 100644 --- a/core/shared/src/main/scala/cats/parse/BitSetCompat.scala +++ b/core/shared/src/main/scala/cats/parse/BitSetCompat.scala @@ -23,6 +23,7 @@ package cats.parse import java.util.BitSet private[parse] abstract class BitSetUtilCompat( + // TODO: Remove isScalaJs/isScalaJvm in next minor version update. See https://github.com/typelevel/cats-parse/issues/391. @inline final val isScalaJs: Boolean, @inline final val isScalaJvm: Boolean ) { diff --git a/core/shared/src/test/scala/cats/parse/BitSetTest.scala b/core/shared/src/test/scala/cats/parse/BitSetTest.scala index d2c989fa..12eac98f 100644 --- a/core/shared/src/test/scala/cats/parse/BitSetTest.scala +++ b/core/shared/src/test/scala/cats/parse/BitSetTest.scala @@ -24,6 +24,7 @@ package cats.parse import org.scalacheck.Prop.forAll class BitSetTest extends munit.ScalaCheckSuite { + // TODO: Remove isScalaJs/isScalaJvm in next minor version update. See https://github.com/typelevel/cats-parse/issues/391. test("isScalaJs/isScalaJvm is consistent") { // This will need to be updated if we ever add scala-native assert(!(BitSetUtil.isScalaJs && BitSetUtil.isScalaJvm)) diff --git a/project/MimaExclusionRules.scala b/project/MimaExclusionRules.scala index 38d56424..77f95e30 100644 --- a/project/MimaExclusionRules.scala +++ b/project/MimaExclusionRules.scala @@ -3,7 +3,7 @@ import com.typesafe.tools.mima.core.IncompatibleMethTypeProblem import com.typesafe.tools.mima.core.IncompatibleResultTypeProblem import com.typesafe.tools.mima.core.DirectMissingMethodProblem object MimaExclusionRules { - val ParserImpl = Seq( + val parserImpl = Seq( "cats.parse.Parser#Impl.mergeCharIn", "cats.parse.Parser#Impl.mergeStrIn", "cats.parse.Parser#Impl#CharIn.copy", @@ -18,4 +18,11 @@ object MimaExclusionRules { "cats.parse.Parser#Impl.mergeCharIn", "cats.parse.Parser#Impl.mergeStrIn" ).map(ProblemFilters.exclude[DirectMissingMethodProblem](_)) + // TODO: Remove these rules in future release. + val bitSetUtil = Seq( + "cats.parse.BitSetUtil.isSingleton", + "cats.parse.BitSetUtil.isSet" + ).map(ProblemFilters.exclude[IncompatibleMethTypeProblem](_)) ++ Seq( + "cats.parse.BitSetUtil.bitSetFor" + ).map(ProblemFilters.exclude[IncompatibleResultTypeProblem](_)) } From e7bf32b9aefee05e6eaed0b965bb1c627c6c78ae Mon Sep 17 00:00:00 2001 From: i10416 Date: Thu, 17 Mar 2022 01:39:43 +0900 Subject: [PATCH 9/9] update mima rules --- project/MimaExclusionRules.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project/MimaExclusionRules.scala b/project/MimaExclusionRules.scala index 77f95e30..c20cf738 100644 --- a/project/MimaExclusionRules.scala +++ b/project/MimaExclusionRules.scala @@ -13,7 +13,8 @@ object MimaExclusionRules { "cats.parse.Parser#Impl#StringIn.parseMut", "cats.parse.Parser#Impl.stringIn", "cats.parse.Parser#Impl#CharIn.copy$default$2", - "cats.parse.Parser#Impl#CharIn.bitSet" + "cats.parse.Parser#Impl#CharIn.bitSet", + "cats.parse.Parser#Impl#CharIn._2" ).map(ProblemFilters.exclude[IncompatibleResultTypeProblem](_)) ++ Seq( "cats.parse.Parser#Impl.mergeCharIn", "cats.parse.Parser#Impl.mergeStrIn"