Skip to content

Commit 93cf183

Browse files
committed
add maxBefore and minAfter
1 parent 65cf59e commit 93cf183

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ lazy val compat = new MultiScalaCrossProject(
8282
sharedSourceDir / "scala-2.11_2.12"
8383
}
8484
},
85-
versionPolicyIntention := Compatibility.BinaryAndSourceCompatible,
85+
versionPolicyIntention := Compatibility.BinaryCompatible,
8686
mimaBinaryIssueFilters ++= {
8787
import com.typesafe.tools.mima.core._
8888
import com.typesafe.tools.mima.core.ProblemFilters._

compat/src/main/scala-2.11_2.12/scala/collection/compat/PackageShared.scala

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,14 @@ private[compat] trait PackageShared {
305305
fact: Sorted[K, V]): SortedExtensionMethods[K, V] =
306306
new SortedExtensionMethods[K, V](fact)
307307

308+
implicit def toSortedMapExtensionMethods[K, V](
309+
fact: collection.SortedMap[K, V]): SortedMapExtensionMethods[K, V] =
310+
new SortedMapExtensionMethods[K, V](fact)
311+
312+
implicit def toSortedSetExtensionMethods[A](
313+
fact: collection.SortedSet[A]): SortedSetExtensionMethods[A] =
314+
new SortedSetExtensionMethods[A](fact)
315+
308316
implicit def toIteratorExtensionMethods[A](self: Iterator[A]): IteratorExtensionMethods[A] =
309317
new IteratorExtensionMethods[A](self)
310318

@@ -401,6 +409,24 @@ class SortedExtensionMethods[K, T <: Sorted[K, T]](private val fact: Sorted[K, T
401409
def rangeUntil(until: K): T = fact.until(until)
402410
}
403411

412+
class SortedMapExtensionMethods[K, V](
413+
private val self: collection.SortedMap[K, V]
414+
) extends AnyVal {
415+
416+
def minAfter(key: K): Option[(K, V)] = self.from(key).headOption
417+
418+
def maxBefore(key: K): Option[(K, V)] = self.until(key).lastOption
419+
}
420+
421+
class SortedSetExtensionMethods[A](
422+
private val self: collection.SortedSet[A]
423+
) extends AnyVal {
424+
425+
def minAfter(key: A): Option[A] = self.from(key).headOption
426+
427+
def maxBefore(key: A): Option[A] = self.until(key).lastOption
428+
}
429+
404430
class IteratorExtensionMethods[A](private val self: c.Iterator[A]) extends AnyVal {
405431
def sameElements[B >: A](that: c.TraversableOnce[B]): Boolean = {
406432
self.sameElements(that.iterator)

compat/src/test/scala/test/scala/collection/SortedTest.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,48 @@ class SortedTest {
6464
}
6565
*/
6666
}
67+
68+
@Test
69+
def sortedSetMinAfter(): Unit = {
70+
val values = 1 to 10
71+
assertEquals(values.to(collection.SortedSet).minAfter(8), Some(8))
72+
assertEquals(values.to(collection.immutable.SortedSet).minAfter(9), Some(9))
73+
assertEquals(values.to(collection.mutable.SortedSet).minAfter(10), Some(10))
74+
75+
assertEquals(values.to(collection.SortedSet).minAfter(11), None)
76+
assertEquals(values.to(collection.immutable.SortedSet).minAfter(12), None)
77+
assertEquals(values.to(collection.mutable.SortedSet).minAfter(13), None)
78+
}
79+
80+
@Test
81+
def sortedSetMaxBefore(): Unit = {
82+
val values = 1 to 10
83+
assertEquals(values.to(collection.SortedSet).maxBefore(4), Some(3))
84+
assertEquals(values.to(collection.immutable.SortedSet).maxBefore(3), Some(2))
85+
assertEquals(values.to(collection.mutable.SortedSet).maxBefore(2), Some(1))
86+
87+
assertEquals(values.to(collection.SortedSet).maxBefore(1), None)
88+
assertEquals(values.to(collection.immutable.SortedSet).maxBefore(0), None)
89+
assertEquals(values.to(collection.mutable.SortedSet).maxBefore(-1), None)
90+
}
91+
92+
@Test
93+
def sortedMapMinAfter(): Unit = {
94+
val values = (1 to 10).map(x => x -> x.toString)
95+
assertEquals(collection.SortedMap(values: _*).minAfter(9), Some(9 -> "9"))
96+
assertEquals(collection.immutable.SortedMap(values: _*).minAfter(10), Some(10 -> "10"))
97+
98+
assertEquals(collection.SortedMap(values: _*).minAfter(11), None)
99+
assertEquals(collection.immutable.SortedMap(values: _*).minAfter(12), None)
100+
}
101+
102+
@Test
103+
def sortedMapMaxBefore(): Unit = {
104+
val values = (1 to 10).map(x => x -> x.toString)
105+
assertEquals(collection.SortedMap(values: _*).maxBefore(3), Some(2 -> "2"))
106+
assertEquals(collection.immutable.SortedMap(values: _*).maxBefore(2), Some(1 -> "1"))
107+
108+
assertEquals(collection.SortedMap(values: _*).maxBefore(1), None)
109+
assertEquals(collection.immutable.SortedMap(values: _*).maxBefore(0), None)
110+
}
67111
}

0 commit comments

Comments
 (0)