blob: cb151edc8a6b7d250c3780e55911f530bafa9bf3 [file] [log] [blame]
Roman Elizarova7db8ec2017-12-21 22:45:12 +03001/*
Roman Elizarov1f74a2d2018-06-29 19:19:45 +03002 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
Roman Elizarova7db8ec2017-12-21 22:45:12 +03003 */
4
Roman Elizarov45c1a732017-12-21 11:53:31 +03005package kotlinx.coroutines.experimental.internal
6
7import kotlin.test.Test
8import kotlin.test.assertEquals
9import kotlin.test.assertFalse
10import kotlin.test.assertTrue
11
12class LinkedListTest {
13 data class IntNode(val i: Int) : LinkedListNode()
14
15 @Test
16 fun testSimpleAddLastRemove() {
17 val list = LinkedListHead()
18 assertContents(list)
19 val n1 = IntNode(1).apply { list.addLast(this) }
20 assertContents(list, 1)
21 val n2 = IntNode(2).apply { list.addLast(this) }
22 assertContents(list, 1, 2)
23 val n3 = IntNode(3).apply { list.addLast(this) }
24 assertContents(list, 1, 2, 3)
25 val n4 = IntNode(4).apply { list.addLast(this) }
26 assertContents(list, 1, 2, 3, 4)
27 assertTrue(n1.remove())
28 assertContents(list, 2, 3, 4)
29 assertTrue(n3.remove())
30 assertContents(list, 2, 4)
31 assertTrue(n4.remove())
32 assertContents(list, 2)
33 assertTrue(n2.remove())
34 assertFalse(n2.remove())
35 assertContents(list)
36 }
37
38 private fun assertContents(list: LinkedListHead, vararg expected: Int) {
39 val n = expected.size
40 val actual = IntArray(n)
41 var index = 0
42 list.forEach<IntNode> { actual[index++] = it.i }
43 assertEquals(n, index)
44 for (i in 0 until n) assertEquals(expected[i], actual[i], "item i")
45 assertEquals(expected.isEmpty(), list.isEmpty)
46 }
47}