package Ġde . kotlin Ber lin . k Properties Ċ Ċ import Ġde . kotlin Ber lin . k Properties . collection .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠK Observable List Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġobservable Mutable List : ĠK Observable Mutable List < Int > ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġobservable Mutable List Ġ= Ġobservable Mutable List () ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 1 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Add () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Add ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa StartIndex : ĠInt , Ġan Added List : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( an Added List . first (), Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Iterator () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Iterator Ġ= Ġobservable Mutable List . iterator () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 5 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Expected ĠConcurrent Modification Exception ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠConcurrent Modification Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ignore Ġas Ġexpected ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Add By Iterator () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Add ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa StartIndex : ĠInt , Ġan Added List : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( an Added List . first (), Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġtemp Iterator Ġ= Ġobservable Mutable List . list Iterator () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . add ( 3 ) ĊĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Add All () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Add ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa StartIndex : ĠInt , Ġan Added List : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . size Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . contains All ( listOf ( 3 , Ġ 4 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addAll ( listOf ( 3 , Ġ 4 )) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remove ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Remov edList : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . size Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . contains All ( listOf ( 1 , Ġ 2 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . clear () ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Remove Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remove ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Remov edList : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Remove Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . contains ( 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 1 Ġ&& Ġit . new Index Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 2 Ġ&& Ġit . new Index Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List . remove ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Remove Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Remove By Iterator () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Remove Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remove ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Remov edList : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Remove Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . contains ( 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 1 Ġ&& Ġit . new Index Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 2 Ġ&& Ġit . new Index Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Iterator Ġ= Ġobservable Mutable List . iterator () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . remove () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Remove Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest RemoveAll () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Remove Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remove ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Remov edList : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Remove Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . size Ġ== Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . contains All ( listOf ( 0 , Ġ 1 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 2 Ġ&& Ġit . new Index Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List . removeAll ( listOf ( 0 , Ġ 1 )) ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġobservable Mutable List . contains ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Remove Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Ret ain All () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Remove Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remove ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Remov edList : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Remove Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . size Ġ== Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . contains All ( listOf ( 0 , Ġ 1 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 2 Ġ&& Ġit . new Index Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List . retain All ( listOf ( 2 )) ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġobservable Mutable List . contains ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Remove Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Add With Index () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Add Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Add ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa StartIndex : ĠInt , Ġan Added List : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Add Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġan Added List . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 0 Ġ&& Ġit . new Index Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 1 Ġ&& Ġit . new Index Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Add Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Add All With Index () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Add Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Add ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa StartIndex : ĠInt , Ġan Added List : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Add Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . size Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġan Added List . contains All ( array ListOf (- 1 , Ġ 0 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 0 Ġ&& Ġit . new Index Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 1 Ġ&& Ġit . new Index Ġ== Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addAll ( 0 , Ġarray ListOf (- 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Add Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest RemoveAt () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Move Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Remove Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . add ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remove ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Remov edList : ĠCollection < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Remove Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġa Remov edList . contains ( 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Per mutation List : ĠCollection < List Per mutation < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġa Per mutation List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Per mutation List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Move Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 1 Ġ&& Ġit . new Index Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠassertTrue Ġ{ Ġit . old Index Ġ== Ġ 2 Ġ&& Ġit . new Index Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List . remove At ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Remove Listener Called Flag Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Move Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Replace Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Replace ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Replacement List : ĠCollection < List Replacement < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Replace Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġa Replacement List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( old Element , Ġnew Element , Ġindex ) Ġ= Ġa Replacement List . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( old Element , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( new Element , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( index , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġobservable Mutable List [ 0 ] Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Replace Listener Called Flag Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set With Iterator () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtemp On Replace Listener Called Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġobservable Mutable List . addListener ( object Ġ: ĠK Mutable List Listener < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Replace ( a Mutable List : ĠK Observable Mutable List < Int >, Ġa Replacement List : ĠCollection < List Replacement < Int >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp On Replace Listener Called Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġa Replacement List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( old Element , Ġnew Element , Ġindex ) Ġ= Ġa Replacement List . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( old Element , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( new Element , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( index , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Iterator Ġ= Ġobservable Mutable List . list Iterator () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĠĠĠĠĠĠĠ Ġtemp Iterator . set ( 5 ) ĊĠĠĠĠĠĠĠ Ġtemp Iterator . next () ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġtemp On Replace Listener Called Flag Ġ} ĊĠĠĠ Ġ} Ċ } Ċ