• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3  */
4 
5 package kotlinx.atomicfu.test
6 
7 import kotlinx.atomicfu.*
8 import kotlin.test.*
9 
10 class TraceToStringTest {
11     private val aTrace = Trace(format = TraceFormat { i, text -> "[$i: $text]" })
12     private val a = atomic(0, aTrace)
13 
14     private val shortTrace = Trace(4)
15     private val s = atomic(0, shortTrace.named("s"))
16 
17     @Test
18     fun testTraceFormat() {
19         repeat(3) { i ->
20             aTrace { "Iteration $i started" }
21             a.lazySet(i)
22             aTrace { "Iteration $i ended" }
23         }
24         val expected = buildString {
25             repeat(3) { i ->
26                 if (i > 0) append('\n')
27                 append("""
28                     [${i * 3 + 0}: Iteration $i started]
29                     [${i * 3 + 1}: lazySet($i)]
30                     [${i * 3 + 2}: Iteration $i ended]
31                     """.trimIndent()
32                 )
33             }
34         }
35         assertEquals(expected, a.trace.toString())
36     }
37 
38     @Test
39     fun testTraceSequence() {
40         s.value = 5
41         s.compareAndSet(5, -2)
42         assertEquals("""
43             0: s.set(5)
44             1: s.CAS(5, -2)
45             """.trimIndent(), s.trace.toString()
46         )
47         s.lazySet(3)
48         s.getAndIncrement()
49         s.getAndAdd(7)
50         assertEquals("""
51             1: s.CAS(5, -2)
52             2: s.lazySet(3)
53             3: s.getAndInc():3
54             4: s.getAndAdd(7):4
55             """.trimIndent(), s.trace.toString()
56         )
57         s.getAndAdd(8)
58         s.getAndAdd(9)
59         assertEquals("""
60             3: s.getAndInc():3
61             4: s.getAndAdd(7):4
62             5: s.getAndAdd(8):11
63             6: s.getAndAdd(9):19
64             """.trimIndent(), s.trace.toString()
65         )
66         s.lazySet(3)
67         assertEquals("""
68             4: s.getAndAdd(7):4
69             5: s.getAndAdd(8):11
70             6: s.getAndAdd(9):19
71             7: s.lazySet(3)
72             """.trimIndent(), s.trace.toString()
73         )
74         s.getAndIncrement()
75         s.getAndAdd(7)
76         assertEquals("""
77             6: s.getAndAdd(9):19
78             7: s.lazySet(3)
79             8: s.getAndInc():3
80             9: s.getAndAdd(7):4
81             """.trimIndent(), s.trace.toString()
82         )
83     }
84 
85     private enum class Status { START, END }
86 
87     @Test
88     fun testMultipleAppend() {
89         val i = 7
90         aTrace.append(i, Status.START)
91         a.lazySet(i)
92         aTrace.append(i, Status.END)
93         assertEquals("""
94             [0: $i]
95             [1: START]
96             [2: lazySet($i)]
97             [3: $i]
98             [4: END]
99             """.trimIndent(), aTrace.toString()
100         )
101     }
102 }