/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . coroutines . internal Ċ Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠLinkedList Test Ġ{ ĊĠĠĠ Ġdata Ġclass ĠInt Node ( val Ġi : ĠInt ) Ġ: ĠLock Free LinkedList Node () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Simple Add Last Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠLock Free LinkedList Head () ĊĠĠĠĠĠĠĠ Ġassert Contents ( list ) ĊĠĠĠĠĠĠĠ Ġval Ġn 1 Ġ= ĠInt Node ( 1 ). apply Ġ{ Ġlist . add Last ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġn 2 Ġ= ĠInt Node ( 2 ). apply Ġ{ Ġlist . add Last ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġn 3 Ġ= ĠInt Node ( 3 ). apply Ġ{ Ġlist . add Last ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġn 4 Ġ= ĠInt Node ( 4 ). apply Ġ{ Ġlist . add Last ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 1 , Ġ 2 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( n 1 . remove ()) ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 2 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( n 3 . remove ()) ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 2 , Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( n 4 . remove ()) ĊĠĠĠĠĠĠĠ Ġassert Contents ( list , Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( n 2 . remove ()) ĊĠĠĠĠĠĠĠ ĠassertFalse ( n 2 . remove ()) ĊĠĠĠĠĠĠĠ Ġassert Contents ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Contents ( list : ĠLock Free LinkedList Head , Ġvar arg Ġexpected : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġexpected . size ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠInt Array ( n ) ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġlist . forEach < Int Node > Ġ{ Ġactual [ index ++] Ġ= Ġit . i Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( n , Ġindex ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) ĠassertEquals ( expected [ i ], Ġactual [ i ], Ġ" item Ġi ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected . isEmpty (), Ġlist . isEmpty ) ĊĠĠĠ Ġ} Ċ } Ċ