1 package kotlinx.coroutines.internal 2 3 import kotlin.test.Test 4 import kotlin.test.assertEquals 5 import kotlin.test.assertFalse 6 import kotlin.test.assertTrue 7 8 class LinkedListTest { 9 data class IntNode(val i: Int) : LinkedListNode() 10 11 @Test testSimpleAddLastRemovenull12 fun testSimpleAddLastRemove() { 13 val list = LinkedListHead() 14 assertContents(list) 15 val n1 = IntNode(1).apply { list.addLast(this) } 16 assertContents(list, 1) 17 val n2 = IntNode(2).apply { list.addLast(this) } 18 assertContents(list, 1, 2) 19 val n3 = IntNode(3).apply { list.addLast(this) } 20 assertContents(list, 1, 2, 3) 21 val n4 = IntNode(4).apply { list.addLast(this) } 22 assertContents(list, 1, 2, 3, 4) 23 assertTrue(n1.remove()) 24 assertContents(list, 2, 3, 4) 25 assertTrue(n3.remove()) 26 assertContents(list, 2, 4) 27 assertTrue(n4.remove()) 28 assertContents(list, 2) 29 assertTrue(n2.remove()) 30 assertFalse(n2.remove()) 31 assertContents(list) 32 } 33 assertContentsnull34 private fun assertContents(list: LinkedListHead, vararg expected: Int) { 35 val n = expected.size 36 val actual = IntArray(n) 37 var index = 0 38 list.forEach<IntNode> { actual[index++] = it.i } 39 assertEquals(n, index) 40 for (i in 0 until n) assertEquals(expected[i], actual[i], "item i") 41 assertEquals(expected.isEmpty(), list.isEmpty) 42 } 43 } 44