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 }