[stdlib] Improve EnumEntries

* Provide short-circuit methods for contract "EnumEntries contains all
  enum entries"
* Make EnumEntries serializable
* Introduce more convenient overload for other backends

#KT-53152


Merge-request: KT-MR-6867
Merged-by: Vsevolod Tolstopyatov <qwwdfsad@gmail.com>
This commit is contained in:
Vsevolod Tolstopyatov
2022-08-22 16:50:28 +00:00
committed by Space
parent cc00dcc038
commit 5054e301be
10 changed files with 209 additions and 21 deletions
@@ -18,6 +18,12 @@ class EnumEntriesListTest {
A, B, C
}
@Test
fun testCannotBeCasted() {
val list = enumEntries(EmptyEnum::values)
assertTrue { list !is MutableList<*> }
}
@Test
fun testForEmptyEnum() {
val list = enumEntries(EmptyEnum::values)
@@ -54,4 +60,33 @@ class EnumEntriesListTest {
val list = enumEntries(NonEmptyEnum::values)
compare(NonEmptyEnum.values().toList(), list) { listBehavior() }
}
enum class E1 {
A
}
enum class E2 {
A, B
}
@Test
fun testVariantEnumBehaviour() {
val list = enumEntries(E1::values)
// Index of
val enumList: List<Enum<*>> = list
assertEquals(0, enumList.indexOf(E1.A))
assertEquals(-1, enumList.indexOf(E2.A))
assertEquals(-1, enumList.indexOf(E2.B))
// Last index of
assertEquals(0, enumList.lastIndexOf(E1.A))
assertEquals(-1, enumList.lastIndexOf(E2.A))
assertEquals(-1, enumList.lastIndexOf(E2.B))
// Contains
assertTrue(enumList.contains(E1.A))
assertFalse(enumList.contains(E2.A))
assertFalse(enumList.contains(E2.B))
}
}