From 77ce30dcb2642a70079abe1c67c1406da507fa73 Mon Sep 17 00:00:00 2001 From: Jozef Koval Date: Thu, 20 Feb 2025 01:40:33 +0100 Subject: [PATCH] Introduce cross compile build for scala 3. --- .github/workflows/ci.yml | 4 +- .gitignore | 9 +- build.sbt | 81 ++-- project/build.properties | 2 +- project/plugins.sbt | 15 +- sbt | 432 ------------------ .../main/{scala => scala-2}/debox/Util.scala | 0 .../{scala => scala-2}/debox/package.scala | 0 shared/src/main/scala-3/debox/Util.scala | 49 ++ shared/src/main/scala-3/debox/package.scala | 8 + shared/src/main/scala/debox/Buffer.scala | 2 + shared/src/test/scala/debox/BufferCheck.scala | 18 +- shared/src/test/scala/debox/MapCheck.scala | 10 +- shared/src/test/scala/debox/SetCheck.scala | 14 +- version.sbt | 1 - 15 files changed, 153 insertions(+), 492 deletions(-) delete mode 100755 sbt rename shared/src/main/{scala => scala-2}/debox/Util.scala (100%) rename shared/src/main/{scala => scala-2}/debox/package.scala (100%) create mode 100644 shared/src/main/scala-3/debox/Util.scala create mode 100644 shared/src/main/scala-3/debox/package.scala delete mode 100644 version.sbt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7e5800..49d1038 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - scala: [2.13.8, 2.12.15, 2.11.12] + scala: [3.3.5, 2.13.16, 2.12.20, 2.11.12] java: [adopt@1.8] runs-on: ${{ matrix.os }} env: @@ -62,7 +62,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - scala: [2.13.8, 2.12.15] + scala: [3.3.5, 2.13.16, 2.12.20] java: [adopt@1.8] runs-on: ${{ matrix.os }} env: diff --git a/.gitignore b/.gitignore index 148691c..47be0c9 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,11 @@ TAGS .#* .lib .idea/ -.bsp/ \ No newline at end of file +.bsp/ + +# Metals +.metals/ +**/metals.sbt + +# Bloop +**/.bloop \ No newline at end of file diff --git a/build.sbt b/build.sbt index 40c160c..9c5dd3e 100644 --- a/build.sbt +++ b/build.sbt @@ -11,8 +11,8 @@ lazy val scalac: Seq[String] = Seq( "-unchecked", // Enable additional warnings where generated code depends on assumptions. "-Xfatal-warnings", // Fail the compilation if there are any warnings. // "-Ypartial-unification", // Enable partial unification in type constructor inference - "-Ywarn-dead-code", // Warn when dead code is identified. - "-Ywarn-numeric-widen" // Warn when numerics are widened. + // "-Ywarn-dead-code", // Warn when dead code is identified. + // "-Ywarn-numeric-widen" // Warn when numerics are widened. //"-Xlog-free-terms", ) @@ -25,6 +25,8 @@ lazy val scalac211: Seq[String] = Seq( "-Ywarn-nullary-override", // Warn when non-nullary `def f()' overrides nullary `def f'. "-Ywarn-nullary-unit", // Warn when nullary methods return Unit. "-Xfuture", // Turn on future language features. + "-Ywarn-dead-code", // Warn when dead code is identified. + "-Ywarn-numeric-widen" // Warn when numerics are widened. ) lazy val scalac212: Seq[String] = Seq( @@ -63,6 +65,8 @@ lazy val scalac212: Seq[String] = Seq( "-Xlint:unsound-match", // Pattern match may not be typesafe. "-Ywarn-infer-any", // Warn when a type argument is inferred to be `Any`. "-Xfuture", // Turn on future language features. + "-Ywarn-dead-code", // Warn when dead code is identified. + "-Ywarn-numeric-widen" // Warn when numerics are widened. ) lazy val scalac213: Seq[String] = Seq( @@ -93,11 +97,19 @@ lazy val scalac213: Seq[String] = Seq( "-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field. "-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component. "-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope. + "-Ywarn-dead-code", // Warn when dead code is identified. + "-Ywarn-numeric-widen" // Warn when numerics are widened. ) -lazy val scala213 = "2.13.8" -lazy val scala212 = "2.12.15" +lazy val scalac3: Seq[String] = Seq( + "-source:3.0-migration" // makes the compiler forgiving on most of the dropped features, printing warnings in place of errors +) + +lazy val scala213 = "2.13.16" +lazy val scala212 = "2.12.20" lazy val scala211 = "2.11.12" +lazy val scala3 = "3.3.5" +lazy val scalatestVersion = "3.2.19" organization := "org.scorexfoundation" @@ -108,22 +120,45 @@ def deboxSettings = Seq( description := "Fast, deboxed, specialized data structures for Scala (fork of non/debox)", resolvers += Resolver.sonatypeRepo("public"), - libraryDependencies ++= Seq( - scalaOrganization.value % "scala-reflect" % scalaVersion.value % "provided", - "org.scalatest" %%% "scalatest" % "3.3.0-SNAP3" % Test, - "org.scalatest" %%% "scalatest-propspec" % "3.3.0-SNAP3" % Test, - "org.scalatest" %%% "scalatest-shouldmatchers" % "3.3.0-SNAP3" % Test, - "org.scalatestplus" %%% "scalacheck-1-15" % "3.3.0.0-SNAP3" % Test, - "org.scalacheck" %%% "scalacheck" % "1.15.2" % Test - ), - scalacOptions := { + libraryDependencies ++= { + val base = Seq( + "org.scalatest" %%% "scalatest" % scalatestVersion % Test, + "org.scalatest" %%% "scalatest-propspec" % scalatestVersion % Test, + "org.scalatest" %%% "scalatest-shouldmatchers" % scalatestVersion % Test + ) + val reflect = Seq(scalaOrganization.value % "scala-reflect" % scalaVersion.value % "provided") + val core211 = Seq( + "org.typelevel" %%% "spire-macros" % "0.17.0-M1", + "org.scalatestplus" %%% "scalacheck-1-15" % "3.2.4.0-M1" % Test, + "org.scalacheck" %%% "scalacheck" % "1.15.2" % Test + ) + val spireMacros = Seq("org.typelevel" %%% "spire-macros" % "0.17.0") + val spire = Seq("org.typelevel" %%% "spire" % "0.18.0") + val scalacheck = Seq( + "org.scalatestplus" %%% "scalacheck-1-18" % "3.2.19.0" % Test, + "org.scalacheck" %%% "scalacheck" % "1.18.1" % Test + ) + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, 11)) => + base ++ core211 + case Some((2, 12)) => + base ++ scalacheck ++ spireMacros ++ reflect + case Some((2, 13)) => + base ++ scalacheck ++ spireMacros ++ reflect + case Some((3, _)) => + base ++ scalacheck ++ spire + } + }, + scalacOptions ++= { CrossVersion.partialVersion(scalaVersion.value) match { - case Some((2, n)) if n == 13 => - scalac ++ scalac213 - case Some((2, n)) if n == 12 => - scalac ++ scalac212 case Some((2, 11)) => scalac ++ scalac211 + case Some((2, 12)) => + scalac ++ scalac212 + case Some((2, 13)) => + scalac ++ scalac213 + case Some((3, _)) => + scalac ++ scalac3 } }, javacOptions ++= javacReleaseOption, @@ -157,18 +192,12 @@ lazy val core = crossProject(JSPlatform, JVMPlatform) .settings(moduleName := "debox") .settings(deboxSettings) .jvmSettings( - libraryDependencies ++= Seq( - "org.typelevel" %%% "spire-macros" % "0.17.0-M1" // The last version published for Scala 2.11-2.13 - ), scalaVersion := scala213, - crossScalaVersions := Seq(scala211, scala212, scala213) + crossScalaVersions := Seq(scala211, scala212, scala213, scala3) ) .jsSettings( scalaVersion := scala213, - crossScalaVersions := Seq(scala213, scala212), - libraryDependencies ++= Seq( - "org.typelevel" %%% "spire-macros" % "0.17.0" // Version supporting Scala.js 1.x 2.13, 3.x - ), + crossScalaVersions := Seq(scala212, scala213, scala3), Test / parallelExecution := false ) @@ -177,7 +206,7 @@ lazy val benchmark = project .dependsOn(core.jvm) .settings( moduleName := "debox-benchmark", - crossScalaVersions := Seq(scala211, scala212, scala213), + crossScalaVersions := Seq(scala211, scala212, scala213, scala3), scalaVersion := scala213, ) .enablePlugins(JmhPlugin) diff --git a/project/build.properties b/project/build.properties index 9edb75b..0a832a2 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.4 +sbt.version=1.10.7 \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index b023284..899e162 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,8 +1,7 @@ -addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.2.1") -addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.17") -addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.3.2") -addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0") -addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1") -addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.2.0") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1") - +addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.3.1") +addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.12.2") +addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7") +addSbtPlugin("com.github.sbt" % "sbt-git" % "2.1.0") +addSbtPlugin("com.github.sbt" % "sbt-dynver" % "5.1.0") +addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") diff --git a/sbt b/sbt deleted file mode 100755 index 6e7bdb2..0000000 --- a/sbt +++ /dev/null @@ -1,432 +0,0 @@ -#!/usr/bin/env bash -# -# A more capable sbt runner, coincidentally also called sbt. -# Author: Paul Phillips - -# todo - make this dynamic -declare -r sbt_release_version=0.11.3 -declare -r sbt_snapshot_version=0.13.0-SNAPSHOT - -unset sbt_jar sbt_dir sbt_create sbt_snapshot sbt_launch_dir -unset scala_version java_home sbt_explicit_version -unset verbose debug quiet - -build_props_sbt () { - if [[ -f project/build.properties ]]; then - versionLine=$(grep ^sbt.version project/build.properties) - versionString=${versionLine##sbt.version=} - echo "$versionString" - fi -} - -update_build_props_sbt () { - local ver="$1" - local old=$(build_props_sbt) - - if [[ $ver == $old ]]; then - return - elif [[ -f project/build.properties ]]; then - perl -pi -e "s/^sbt\.version=.*\$/sbt.version=${ver}/" project/build.properties - grep -q '^sbt.version=' project/build.properties || echo "sbt.version=${ver}" >> project/build.properties - - echo !!! - echo !!! Updated file project/build.properties setting sbt.version to: $ver - echo !!! Previous value was: $old - echo !!! - fi -} - -sbt_version () { - if [[ -n $sbt_explicit_version ]]; then - echo $sbt_explicit_version - else - local v=$(build_props_sbt) - if [[ -n $v ]]; then - echo $v - else - echo $sbt_release_version - fi - fi -} - -echoerr () { - echo 1>&2 "$@" -} -vlog () { - [[ $verbose || $debug ]] && echoerr "$@" -} -dlog () { - [[ $debug ]] && echoerr "$@" -} - -# this seems to cover the bases on OSX, and someone will -# have to tell me about the others. -get_script_path () { - local path="$1" - [[ -L "$path" ]] || { echo "$path" ; return; } - - local target=$(readlink "$path") - if [[ "${target:0:1}" == "/" ]]; then - echo "$target" - else - echo "$(dirname $path)/$target" - fi -} - -# a ham-fisted attempt to move some memory settings in concert -# so they need not be dicked around with individually. -get_mem_opts () { - local mem=${1:-1536} - local perm=$(( $mem / 4 )) - (( $perm > 256 )) || perm=256 - (( $perm < 1024 )) || perm=1024 - local codecache=$(( $perm / 2 )) - - echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m" -} - -die() { - echo "Aborting: $@" - exit 1 -} - -make_url () { - groupid="$1" - category="$2" - version="$3" - - echo "http://typesafe.artifactoryonline.com/typesafe/ivy-$category/$groupid/sbt-launch/$version/sbt-launch.jar" -} - -declare -r default_jvm_opts="-Dfile.encoding=UTF8" -declare -r default_sbt_opts="-XX:+CMSClassUnloadingEnabled" -declare -r default_sbt_mem=1536 -declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" -declare -r sbt_opts_file=".sbtopts" -declare -r jvm_opts_file=".jvmopts" -declare -r latest_28="2.8.2" -declare -r latest_29="2.9.1" -declare -r latest_210="2.10.0-SNAPSHOT" - -declare -r script_path=$(get_script_path "$BASH_SOURCE") -declare -r script_dir="$(dirname $script_path)" -declare -r script_name="$(basename $script_path)" - -# some non-read-onlies set with defaults -declare java_cmd=java -declare sbt_launch_dir="$script_dir/.lib" -declare sbt_mem=$default_sbt_mem - -# pull -J and -D options to give to java. -declare -a residual_args -declare -a java_args -declare -a scalac_args -declare -a sbt_commands - -build_props_scala () { - if [[ -f project/build.properties ]]; then - versionLine=$(grep ^build.scala.versions project/build.properties) - versionString=${versionLine##build.scala.versions=} - echo ${versionString%% .*} - fi -} - -execRunner () { - # print the arguments one to a line, quoting any containing spaces - [[ $verbose || $debug ]] && echo "# Executing command line:" && { - for arg; do - if printf "%s\n" "$arg" | grep -q ' '; then - printf "\"%s\"\n" "$arg" - else - printf "%s\n" "$arg" - fi - done - echo "" - } - - exec "$@" -} - -sbt_groupid () { - case $(sbt_version) in - 0.7.*) echo org.scala-tools.sbt ;; - 0.10.*) echo org.scala-tools.sbt ;; - 0.11.[12]) echo org.scala-tools.sbt ;; - *) echo org.scala-sbt ;; - esac -} - -sbt_artifactory_list () { - local version0=$(sbt_version) - local version=${version0%-SNAPSHOT} - local url="http://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/$(sbt_groupid)/sbt-launch/" - dlog "Looking for snapshot list at: $url " - - curl -s --list-only "$url" | \ - grep -F $version | \ - perl -e 'print reverse <>' | \ - perl -pe 's#^/dev/null - dlog "curl returned: $?" - echo "$url" - return - done -} - -jar_url () { - case $(sbt_version) in - 0.7.*) echo "http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.7.jar" ;; - *-SNAPSHOT) make_snapshot_url ;; - *) make_release_url ;; - esac -} - -jar_file () { - echo "$sbt_launch_dir/$1/sbt-launch.jar" -} - -download_url () { - local url="$1" - local jar="$2" - - echo "Downloading sbt launcher $(sbt_version):" - echo " From $url" - echo " To $jar" - - mkdir -p $(dirname "$jar") && { - if which curl >/dev/null; then - curl --fail --silent "$url" --output "$jar" - elif which wget >/dev/null; then - wget --quiet -O "$jar" "$url" - fi - } && [[ -f "$jar" ]] -} - -acquire_sbt_jar () { - sbt_url="$(jar_url)" - sbt_jar="$(jar_file $(sbt_version))" - - [[ -f "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar" -} - -usage () { - cat < path to global settings/plugins directory (default: ~/.sbt/) - -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) - -ivy path to local Ivy repository (default: ~/.ivy2) - -mem set memory options (default: $sbt_mem, which is - $(get_mem_opts $sbt_mem) ) - -no-share use all local caches; no sharing - -offline put sbt in offline mode - -jvm-debug Turn on JVM debugging, open at the given port. - -batch Disable interactive mode - - # sbt version (default: from project/build.properties if present, else latest release) - !!! The only way to accomplish this pre-0.12.0 if there is a build.properties file which - !!! contains an sbt.version property is to update the file on disk. That's what this does. - -sbt-version use the specified version of sbt - -sbt-jar use the specified jar as the sbt launcher - -sbt-snapshot use a snapshot version of sbt - -sbt-launch-dir directory to hold sbt launchers (default: $sbt_launch_dir) - - # scala version (default: as chosen by sbt) - -28 use $latest_28 - -29 use $latest_29 - -210 use $latest_210 - -scala-home use the scala build at the specified directory - -scala-version use the specified version of scala - - # java version (default: java from PATH, currently $(java -version |& grep version)) - -java-home alternate JAVA_HOME - - # jvm options and output control - JAVA_OPTS environment variable holding jvm args, if unset uses "$default_jvm_opts" - SBT_OPTS environment variable holding jvm args, if unset uses "$default_sbt_opts" - .jvmopts if file is in sbt root, it is prepended to the args given to the jvm - .sbtopts if file is in sbt root, it is prepended to the args given to **sbt** - -Dkey=val pass -Dkey=val directly to the jvm - -J-X pass option -X directly to the jvm (-J is stripped) - -S-X add -X to sbt's scalacOptions (-J is stripped) - -In the case of duplicated or conflicting options, the order above -shows precedence: JAVA_OPTS lowest, command line options highest. -EOM -} - -addJava () { - dlog "[addJava] arg = '$1'" - java_args=( "${java_args[@]}" "$1" ) -} -addSbt () { - dlog "[addSbt] arg = '$1'" - sbt_commands=( "${sbt_commands[@]}" "$1" ) -} -addScalac () { - dlog "[addScalac] arg = '$1'" - scalac_args=( "${scalac_args[@]}" "$1" ) -} -addResidual () { - dlog "[residual] arg = '$1'" - residual_args=( "${residual_args[@]}" "$1" ) -} -addResolver () { - addSbt "set resolvers in ThisBuild += $1" -} -addDebugger () { - addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1" -} -get_jvm_opts () { - # echo "${JAVA_OPTS:-$default_jvm_opts}" - # echo "${SBT_OPTS:-$default_sbt_opts}" - - [[ -f "$jvm_opts_file" ]] && cat "$jvm_opts_file" -} - -process_args () -{ - require_arg () { - local type="$1" - local opt="$2" - local arg="$3" - - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } - while [[ $# -gt 0 ]]; do - case "$1" in - -h|-help) usage; exit 1 ;; - -v|-verbose) verbose=1 && shift ;; - -d|-debug) debug=1 && shift ;; - -q|-quiet) quiet=1 && shift ;; - - -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; - -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; - -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; - -no-share) addJava "$noshare_opts" && shift ;; - -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; - -sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;; - -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; - -offline) addSbt "set offline := true" && shift ;; - -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; - -batch) exec 0 )) || echo "Starting $script_name: invoke with -help for other options" - -# verify this is an sbt dir or -create was given -[[ -f ./build.sbt || -d ./project || -n "$sbt_create" ]] || { - cat < spirecfor} + +package debox { + type sp = scala.specialized + + def cfor[A](init: A)(test: A => Boolean, next: A => A)(body: A => Unit): Unit = + spirecfor(init)(test, next)(body) +} diff --git a/shared/src/main/scala/debox/Buffer.scala b/shared/src/main/scala/debox/Buffer.scala index 6b948c3..bd26163 100644 --- a/shared/src/main/scala/debox/Buffer.scala +++ b/shared/src/main/scala/debox/Buffer.scala @@ -3,6 +3,8 @@ package debox import scala.reflect.ClassTag /** + * NOTE: Use ArrayBuffer or ArrayDeque instead of Buffer since Scala 2.13+ + * * Buffer is a mutable, indexed sequence of values. * * Buffer wraps an underlying array, which provides constant-time diff --git a/shared/src/test/scala/debox/BufferCheck.scala b/shared/src/test/scala/debox/BufferCheck.scala index 49604c7..5234113 100644 --- a/shared/src/test/scala/debox/BufferCheck.scala +++ b/shared/src/test/scala/debox/BufferCheck.scala @@ -40,7 +40,7 @@ abstract class BufferCheck[A: Arbitrary: ClassTag] } property("fromIterable, apply") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val buf1 = Buffer.fromIterable(xs) val buf2 = Buffer(xs: _*) val seq = xs.toIndexedSeq @@ -59,7 +59,7 @@ abstract class BufferCheck[A: Arbitrary: ClassTag] } property("equals (==), hashCode (##)") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val seq = xs.toIndexedSeq val a = Buffer.fromIterable(seq) val b = Buffer.fromIterable(seq ++ seq).slice(0, seq.length) @@ -81,7 +81,7 @@ abstract class BufferCheck[A: Arbitrary: ClassTag] } property("clear") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val a = Buffer.fromIterable(xs) a.clear() a.isEmpty shouldBe true @@ -100,7 +100,7 @@ abstract class BufferCheck[A: Arbitrary: ClassTag] } property("adding elements (+=)") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val buf = Buffer.empty[A] val control = mutable.ArrayBuffer.empty[A] xs.foreach { x => @@ -112,7 +112,7 @@ abstract class BufferCheck[A: Arbitrary: ClassTag] } property("removing elements (-=)") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val buf = Buffer.fromIterable(xs) val control = mutable.ArrayBuffer(xs.toSeq: _*) xs.foreach { _ => @@ -178,25 +178,25 @@ abstract class BufferCheck[A: Arbitrary: ClassTag] } property("iterator") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => Buffer.fromIterable(xs).iterator().toList shouldBe xs } } property("toIterable") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => Buffer.fromIterable(xs).toIterable().toList shouldBe xs } } property("toList") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => Buffer.fromIterable(xs).toList() shouldBe xs } } property("toVector") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => Buffer.fromIterable(xs).toVector() shouldBe xs.toVector } } diff --git a/shared/src/test/scala/debox/MapCheck.scala b/shared/src/test/scala/debox/MapCheck.scala index e581659..8259904 100644 --- a/shared/src/test/scala/debox/MapCheck.scala +++ b/shared/src/test/scala/debox/MapCheck.scala @@ -28,7 +28,7 @@ abstract class MapCheck[A: Arbitrary: ClassTag: Cogen, B: Arbitrary: ClassTag: C } property("fromIterable, apply") { - forAll { pairs: List[(A, B)] => + forAll { (pairs: List[(A, B)]) => val map1 = DMap.fromIterable(pairs) val map2 = DMap(pairs: _*) val control = mutable.Map(pairs: _*) @@ -38,7 +38,7 @@ abstract class MapCheck[A: Arbitrary: ClassTag: Cogen, B: Arbitrary: ClassTag: C } property("copy") { - forAll { kvs: List[(A, B)] => + forAll { (kvs: List[(A, B)]) => val a = DMap.fromIterable(kvs) val b = a.copy() a shouldBe b @@ -52,7 +52,7 @@ abstract class MapCheck[A: Arbitrary: ClassTag: Cogen, B: Arbitrary: ClassTag: C } property("clear") { - forAll { kvs: List[(A, B)] => + forAll { (kvs: List[(A, B)]) => val a = DMap.fromIterable(kvs) a.clear() a shouldBe DMap.empty[A, B] @@ -60,7 +60,7 @@ abstract class MapCheck[A: Arbitrary: ClassTag: Cogen, B: Arbitrary: ClassTag: C } property("adding elements (update)") { - forAll { kvs: Map[A, B] => + forAll { (kvs: Map[A, B]) => val map = DMap.empty[A, B] val control = mutable.Map.empty[A, B] kvs.foreach { case (k, v) => @@ -73,7 +73,7 @@ abstract class MapCheck[A: Arbitrary: ClassTag: Cogen, B: Arbitrary: ClassTag: C } property("removing elements (remove)") { - forAll { kvs: Map[A, B] => + forAll { (kvs: Map[A, B]) => val map = DMap.fromIterable(kvs) val control = mutable.Map(kvs.toSeq: _*) kvs.foreach { case (k, _) => diff --git a/shared/src/test/scala/debox/SetCheck.scala b/shared/src/test/scala/debox/SetCheck.scala index 88a4441..9d1136e 100644 --- a/shared/src/test/scala/debox/SetCheck.scala +++ b/shared/src/test/scala/debox/SetCheck.scala @@ -18,7 +18,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] d.size == s.size && d.forall(s.contains) property("fromArray") { - forAll { xs: Array[A] => + forAll { (xs: Array[A]) => val set = DSet.fromArray(xs) val control = mutable.Set(xs.toSeq: _*) hybridEq(set, control) shouldBe true @@ -26,7 +26,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] } property("fromIterable, apply") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val set1 = DSet.fromIterable(xs) val set2 = DSet(xs: _*) val control = mutable.Set(xs: _*) @@ -36,7 +36,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] } property("equals (==), hashCode (##)") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val a = DSet.fromIterable(xs) val b = DSet.fromIterable(xs.reverse) a shouldBe b @@ -45,7 +45,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] } property("copy") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val a = DSet.fromIterable(xs) val b = a.copy() a shouldBe b @@ -59,7 +59,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] } property("clear") { - forAll { xs: List[A] => + forAll { (xs: List[A]) => val a = DSet.fromIterable(xs) a.clear() a shouldBe DSet.empty[A] @@ -67,7 +67,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] } property("adding elements (+=)") { - forAll { xs: Set[A] => + forAll { (xs: Set[A]) => val set = DSet.empty[A] val control = mutable.Set.empty[A] xs.foreach { x => @@ -80,7 +80,7 @@ abstract class SetCheck[A: Arbitrary: ClassTag: Cogen] } property("removing elements (-=)") { - forAll { xs: Set[A] => + forAll { (xs: Set[A]) => val set = DSet.fromIterable(xs) val control = mutable.Set(xs.toSeq: _*) xs.foreach { x => diff --git a/version.sbt b/version.sbt deleted file mode 100644 index 69d21e3..0000000 --- a/version.sbt +++ /dev/null @@ -1 +0,0 @@ -//ThisBuild / version := "0.9.0"