Skip to content

Commit ab002ca

Browse files
authored
Merge pull request #612 from xuwei-k/maxBefore-minAfter
2 parents 01d5572 + 93cf183 commit ab002ca

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

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
@@ -309,6 +309,14 @@ private[compat] trait PackageShared {
309309
fact: Sorted[K, V]): SortedExtensionMethods[K, V] =
310310
new SortedExtensionMethods[K, V](fact)
311311

312+
implicit def toSortedMapExtensionMethods[K, V](
313+
fact: collection.SortedMap[K, V]): SortedMapExtensionMethods[K, V] =
314+
new SortedMapExtensionMethods[K, V](fact)
315+
316+
implicit def toSortedSetExtensionMethods[A](
317+
fact: collection.SortedSet[A]): SortedSetExtensionMethods[A] =
318+
new SortedSetExtensionMethods[A](fact)
319+
312320
implicit def toIteratorExtensionMethods[A](self: Iterator[A]): IteratorExtensionMethods[A] =
313321
new IteratorExtensionMethods[A](self)
314322

@@ -405,6 +413,24 @@ class SortedExtensionMethods[K, T <: Sorted[K, T]](private val fact: Sorted[K, T
405413
def rangeUntil(until: K): T = fact.until(until)
406414
}
407415

416+
class SortedMapExtensionMethods[K, V](
417+
private val self: collection.SortedMap[K, V]
418+
) extends AnyVal {
419+
420+
def minAfter(key: K): Option[(K, V)] = self.from(key).headOption
421+
422+
def maxBefore(key: K): Option[(K, V)] = self.until(key).lastOption
423+
}
424+
425+
class SortedSetExtensionMethods[A](
426+
private val self: collection.SortedSet[A]
427+
) extends AnyVal {
428+
429+
def minAfter(key: A): Option[A] = self.from(key).headOption
430+
431+
def maxBefore(key: A): Option[A] = self.until(key).lastOption
432+
}
433+
408434
class IteratorExtensionMethods[A](private val self: c.Iterator[A]) extends AnyVal {
409435
def sameElements[B >: A](that: c.TraversableOnce[B]): Boolean = {
410436
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)