diff --git a/build.sbt b/build.sbt index 0dfa27d2..a7e598cf 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ unmanagedSourceDirectories in Compile += ( else (sourceDirectory in Compile).value / "scala-2.11_2.12" ) -crossScalaVersions := Seq("2.12.5", "2.13.0-M4-pre-20d3c21", "2.11.12") +crossScalaVersions := Seq("2.12.5", "2.13.0-pre-b11db01", "2.11.12") scalaVersion := crossScalaVersions.value.head diff --git a/src/main/scala-2.11_2.12/collection/BuildFrom.scala b/src/main/scala-2.11_2.12/scala/collection/BuildFrom.scala similarity index 100% rename from src/main/scala-2.11_2.12/collection/BuildFrom.scala rename to src/main/scala-2.11_2.12/scala/collection/BuildFrom.scala diff --git a/src/main/scala-2.11_2.12/collection/Factory.scala b/src/main/scala-2.11_2.12/scala/collection/Factory.scala similarity index 100% rename from src/main/scala-2.11_2.12/collection/Factory.scala rename to src/main/scala-2.11_2.12/scala/collection/Factory.scala diff --git a/src/main/scala-2.11_2.12/collection/compat_impl/package.scala b/src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala similarity index 70% rename from src/main/scala-2.11_2.12/collection/compat_impl/package.scala rename to src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala index 7f627e4f..91abd31a 100644 --- a/src/main/scala-2.11_2.12/collection/compat_impl/package.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/CompatImpl.scala @@ -1,10 +1,10 @@ -package scala.collection +package scala.collection.compat -import scala.collection.generic._ +import scala.collection.generic.CanBuildFrom import scala.collection.mutable.Builder -import scala.reflect.ClassTag +import scala.collection.{immutable, mutable} -package object compat_impl { +private[compat] object CompatImpl { def simpleCBF[A, C](f: => Builder[A, C]): CanBuildFrom[Any, A, C] = new CanBuildFrom[Any, A, C] { def apply(from: Any): Builder[A, C] = apply() def apply(): Builder[A, C] = f diff --git a/src/main/scala-2.11_2.12/collection/compat/package.scala b/src/main/scala-2.11_2.12/scala/collection/compat/package.scala similarity index 90% rename from src/main/scala-2.11_2.12/collection/compat/package.scala rename to src/main/scala-2.11_2.12/scala/collection/compat/package.scala index 75efe169..69f4aa14 100644 --- a/src/main/scala-2.11_2.12/collection/compat/package.scala +++ b/src/main/scala-2.11_2.12/scala/collection/compat/package.scala @@ -6,7 +6,7 @@ import scala.reflect.ClassTag /** The collection compatibility API */ package object compat { - import scala.collection.compat_impl._ + import CompatImpl._ implicit def genericCompanionToCBF[A, CC[X] <: GenTraversable[X]](fact: GenericCompanion[CC]): CanBuildFrom[Any, A, CC[A]] = simpleCBF(fact.newBuilder[A]) @@ -48,6 +48,12 @@ package object compat { def lazyAppendAll(as: => TraversableOnce[A]): Stream[A] = stream.append(as) } + implicit class SortedExtensionMethods[K, T <: Sorted[K, T]](private val fact: Sorted[K, T]) { + def rangeFrom(from: K): T = fact.from(from) + def rangeTo(to: K): T = fact.to(to) + def rangeUntil(until: K): T = fact.until(until) + } + // This really belongs into scala.collection but there's already a package object in scala-library so we can't add to it type IterableOnce[+X] = TraversableOnce[X] } diff --git a/src/main/scala-2.11_2.12/collection/immutable/ImmutableArray.scala b/src/main/scala-2.11_2.12/scala/collection/immutable/ImmutableArray.scala similarity index 100% rename from src/main/scala-2.11_2.12/collection/immutable/ImmutableArray.scala rename to src/main/scala-2.11_2.12/scala/collection/immutable/ImmutableArray.scala diff --git a/src/test/scala/collection/BuildFromTest.scala b/src/test/scala/test/scala/collection/BuildFromTest.scala similarity index 96% rename from src/test/scala/collection/BuildFromTest.scala rename to src/test/scala/test/scala/collection/BuildFromTest.scala index e0ffe2f6..2de26ef1 100644 --- a/src/test/scala/collection/BuildFromTest.scala +++ b/src/test/scala/test/scala/collection/BuildFromTest.scala @@ -1,10 +1,11 @@ -package scala.collection +package test.scala.collection import org.junit.Test -import scala.collection.mutable.{ArrayBuffer, Builder, ListBuffer} -import scala.collection.immutable.{HashMap, List, TreeMap, TreeSet} import scala.collection.compat._ +import scala.collection.immutable.{HashMap, TreeMap, TreeSet} +import scala.collection.mutable.{ArrayBuffer, Builder, ListBuffer} +import scala.collection.{BitSet, BuildFrom, SortedMap, SortedSet, immutable, mutable} // Tests copied from the 2.13 scala-library class BuildFromTest { diff --git a/src/test/scala/collection/CollectionTest.scala b/src/test/scala/test/scala/collection/CollectionTest.scala similarity index 97% rename from src/test/scala/collection/CollectionTest.scala rename to src/test/scala/test/scala/collection/CollectionTest.scala index f91d8283..65217af5 100644 --- a/src/test/scala/collection/CollectionTest.scala +++ b/src/test/scala/test/scala/collection/CollectionTest.scala @@ -1,12 +1,10 @@ -package collection +package test.scala.collection -import java.util - -import org.junit.Test import org.junit.Assert._ +import org.junit.Test -import scala.collection.immutable.BitSet import scala.collection.compat._ +import scala.collection.immutable.BitSet class CollectionTest { @Test diff --git a/src/test/scala/collection/FactoryTest.scala b/src/test/scala/test/scala/collection/FactoryTest.scala similarity index 86% rename from src/test/scala/collection/FactoryTest.scala rename to src/test/scala/test/scala/collection/FactoryTest.scala index 5ea2dd0c..84e1c027 100644 --- a/src/test/scala/collection/FactoryTest.scala +++ b/src/test/scala/test/scala/collection/FactoryTest.scala @@ -1,15 +1,15 @@ -package collection +package test.scala.collection import org.junit.{Assert, Test} -import scala.collection.{BitSet, Factory, Iterable, immutable, mutable} import scala.collection.compat._ +import scala.collection.{BitSet, Factory, immutable, mutable} class FactoryTest { implicitly[Factory[Char, String]] implicitly[Factory[Char, Array[Char]]] - implicitly[Factory[Int, BitSet]] + implicitly[Factory[Int, collection.BitSet]] implicitly[Factory[Int, mutable.BitSet]] implicitly[Factory[Int, immutable.BitSet]] diff --git a/src/test/scala/collection/ImmutableArrayTest.scala b/src/test/scala/test/scala/collection/ImmutableArrayTest.scala similarity index 98% rename from src/test/scala/collection/ImmutableArrayTest.scala rename to src/test/scala/test/scala/collection/ImmutableArrayTest.scala index 3d7984a3..6e67ce21 100644 --- a/src/test/scala/collection/ImmutableArrayTest.scala +++ b/src/test/scala/test/scala/collection/ImmutableArrayTest.scala @@ -1,4 +1,4 @@ -package collection +package test.scala.collection import org.junit.{Assert, Test} diff --git a/src/test/scala/collection/StreamTest.scala b/src/test/scala/test/scala/collection/StreamTest.scala similarity index 87% rename from src/test/scala/collection/StreamTest.scala rename to src/test/scala/test/scala/collection/StreamTest.scala index 31837699..3b308b5f 100644 --- a/src/test/scala/collection/StreamTest.scala +++ b/src/test/scala/test/scala/collection/StreamTest.scala @@ -1,4 +1,4 @@ -package collection +package test.scala.collection import org.junit.Test diff --git a/src/test/scala/test/scala/collection/generic/SortedTest.scala b/src/test/scala/test/scala/collection/generic/SortedTest.scala new file mode 100644 index 00000000..5e0a30fd --- /dev/null +++ b/src/test/scala/test/scala/collection/generic/SortedTest.scala @@ -0,0 +1,55 @@ +package test.scala.collection.generic + +import org.junit.Assert._ +import org.junit.Test + +import scala.collection.compat._ +import scala.collection.{immutable => i, mutable => m} + +class SortedTest { + @Test + def immutableRangeOps(): Unit = { + val st = i.SortedSet(-1, 2, 4, 3) + for (x <- List(0, 1, 4, -1, -4)) { + val s1 = st.rangeFrom(x) + assertEquals(s1: i.SortedSet[Int], st.from(x)) + val s2 = st.rangeTo(x) + assertEquals(s2: i.SortedSet[Int], st.to(x)) + val s3 = st.rangeUntil(x) + assertEquals(s3: i.SortedSet[Int], st.until(x)) + } + val mp = i.SortedMap("" -> 0, "ds" -> -3, "-??" -> 13, "Df" -> 33, "d!" -> -32) + for (x <- List("", "-", "@", "aa", "D", "d")) { + val m1 = mp.rangeFrom(x) + assertEquals(m1: i.SortedMap[String, Int], mp.from(x)) + val m2 = mp.rangeTo(x) + assertEquals(m2: i.SortedMap[String, Int], mp.to(x)) + val m3 = mp.rangeUntil(x) + assertEquals(m3: i.SortedMap[String, Int], mp.until(x)) + } + } + + @Test + def mutableRangeOps(): Unit = { + val st = m.SortedSet(-1, 2, 4, 3) + for (x <- List(0, 1, 4, -1, -4)) { + val s1 = st.rangeFrom(x) + assertEquals(s1: m.SortedSet[Int], st.from(x)) + val s2 = st.rangeTo(x) + assertEquals(s2: m.SortedSet[Int], st.to(x)) + val s3 = st.rangeUntil(x) + assertEquals(s3: m.SortedSet[Int], st.until(x)) + } + /* 2.11 doesn't have a mutable.SortedMap + val mp = m.SortedMap("" -> 0, "ds" -> -3, "-??" -> 13, "Df" -> 33, "d!" -> -32) + for (x <- List("", "-", "@", "aa", "D", "d")) { + val m1 = mp.rangeFrom(x) + assertEquals(m1: m.SortedMap[String, Int], mp.from(x)) + val m2 = mp.rangeTo(x) + assertEquals(m2: m.SortedMap[String, Int], mp.to(x)) + val m3 = mp.rangeUntil(x) + assertEquals(m3: m.SortedMap[String, Int], mp.until(x)) + } + */ + } +}