Create method Collection.randomOrNull() #KT-35347

This commit is contained in:
Abduqodiri Qurbonzoda
2020-01-15 22:16:47 +03:00
parent 80d5723a07
commit 3cad1bbb51
12 changed files with 589 additions and 0 deletions
@@ -665,6 +665,29 @@ class ArraysTest {
assertFailsWith<NoSuchElementException> { emptyArray<Any>().random() }
}
@Test fun randomOrNull() {
Array(100) { it }.let { array ->
val tosses = List(10) { array.randomOrNull() }
assertTrue(tosses.distinct().size > 1, "Should be some distinct elements in $tosses")
val seed = Random.nextInt()
val random1 = Random(seed)
val random2 = Random(seed)
val tosses1 = List(10) { array.randomOrNull(random1) }
val tosses2 = List(10) { array.randomOrNull(random2) }
assertEquals(tosses1, tosses2)
}
arrayOf("x").let { singletonArray ->
val tosses = List(10) { singletonArray.randomOrNull() }
assertEquals(singletonArray.toList(), tosses.distinct())
}
assertNull(emptyArray<Any>().randomOrNull())
}
@Test fun contains() {
assertTrue(arrayOf("1", "2", "3", "4").contains("2"))
@@ -663,6 +663,31 @@ class CollectionTest {
assertFailsWith<NoSuchElementException> { emptyList<Any>().random() }
}
@Test fun randomOrNull() {
val list = List(100) { it }
val set = list.toSet()
listOf(list, set).forEach { collection: Collection<Int> ->
val tosses = List(10) { collection.randomOrNull() }
assertTrue(tosses.distinct().size > 1, "Should be some distinct elements in $tosses")
val seed = Random.nextInt()
val random1 = Random(seed)
val random2 = Random(seed)
val tosses1 = List(10) { collection.randomOrNull(random1) }
val tosses2 = List(10) { collection.randomOrNull(random2) }
assertEquals(tosses1, tosses2)
}
listOf("x").let { singletonList ->
val tosses = List(10) { singletonList.randomOrNull() }
assertEquals(singletonList, tosses.distinct())
}
assertNull(emptyList<Any>().randomOrNull())
}
@Test fun subscript() {
val list = arrayListOf("foo", "bar")
assertEquals("foo", list[0])
@@ -423,4 +423,10 @@ public class RangeTest {
assertFailsWith<NoSuchElementException> { LongRange.EMPTY.random() }
assertFailsWith<NoSuchElementException> { CharRange.EMPTY.random() }
}
@Test fun randomOrNullInEmptyRange() {
assertNull(IntRange.EMPTY.randomOrNull())
assertNull(LongRange.EMPTY.randomOrNull())
assertNull(CharRange.EMPTY.randomOrNull())
}
}
+23
View File
@@ -1029,6 +1029,29 @@ class StringTest {
assertFailsWith<NoSuchElementException> { data("").random() }
}
@Test fun randomOrNull() = withOneCharSequenceArg { data ->
data("abcdefg").let { charSeq ->
val tosses = List(10) { charSeq.randomOrNull() }
assertTrue(tosses.distinct().size > 1, "Should be some distinct elements in $tosses")
val seed = Random.nextInt()
val random1 = Random(seed)
val random2 = Random(seed)
val tosses1 = List(10) { charSeq.randomOrNull(random1) }
val tosses2 = List(10) { charSeq.randomOrNull(random2) }
assertEquals(tosses1, tosses2)
}
data("x").let { singletonCharSeq ->
val tosses = List(10) { singletonCharSeq.randomOrNull() }
assertEquals(singletonCharSeq.toList(), tosses.distinct())
}
assertNull(data("").randomOrNull())
}
@Test fun partition() {
val data = "a1b2c3"
val pair = data.partition { it.isAsciiDigit() }