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