package Ġcom . github . wh yr ising . y . collections . vector Ċ Ċ import Ġcom . github . wh yr ising . y . collections . con cret ions . vector . Persistent Vector Ċ import Ġcom . github . wh yr ising . y . collections . vector . Persistent Vector Jvm Test . Companion . assert Arrays Are E quiv Ċ import Ġcom . github . wh yr ising . y . utils . run Action Ċ import Ġio . kot est . assertions . throw ables . should Not Throw Ċ import Ġio . kot est . assertions . throw ables . should Throw Exactly Ċ import Ġio . kot est . common . Experimental K ot est Ċ import Ġio . kot est . core . spec . style . Free Spec Ċ import Ġio . kot est . framework . concurrency . cont in ually Ċ import Ġio . kot est . matchers . b ooleans . shouldBe True Ċ import Ġio . kot est . matchers . collections . should Contain Ċ import Ġio . kot est . matchers . ints . shouldBe Exactly Ċ import Ġio . kot est . matchers . null s . shouldBe Null Ċ import Ġio . kot est . matchers . null s . should Not BeNull Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . types . shouldBe Same Instance As Ċ import Ġio . kot est . matchers . types . should Not Be Same Instance As Ċ import Ġio . kot est . property . Ar b Ċ import Ġio . kot est . property . ar bitrary . filter Ċ import Ġio . kot est . property . ar bitrary . int Ċ import Ġio . kot est . property . ar bitrary . list Ċ import Ġio . kot est . property . check All Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlin . time . Duration Ċ Ċ @ Experimental K ot est Ċ @ Experimental Serialization Api Ċ class ĠTrans ient Vector Test Ġ: ĠFree Spec ({ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ" constructor " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġv . root ĊĊĠĠĠĠĠĠĠ Ġval Ġtransient Vector Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĠĠĠĠĠĠĠ Ġval Ġtv Root Ġ= Ġtransient Vector . root ĊĊĠĠĠĠĠĠĠ Ġtransient Vector . count ĠshouldBe Exactly Ġv . count ĊĠĠĠĠĠĠĠ Ġtransient Vector . shift ĠshouldBe Exactly Ġv . shift ĊĠĠĠĠĠĠĠ Ġtransient Vector . tail . size ĠshouldBe Exactly Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġassert Arrays Are E quiv ( transient Vector . tail , Ġv . tail ) ĊĠĠĠĠĠĠĠ Ġtv Root Ġshould Not Be Same Instance As Ġroot ĊĠĠĠĠĠĠĠ Ġtv Root . array . size ĠshouldBe Exactly Ġroot . array . size ĊĠĠĠĠĠĠĠ Ġtv Root . array Ġshould Not Be Same Instance As Ġroot . array ĊĠĠĠĠĠĠĠ Ġtv Root . edit . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġroot . edit . value . shouldBe Null () ĊĠĠĠĠĠĠĠ Ġval Ġv Node Ġ= Ġroot . array [ 0 ] Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠ Ġval Ġtv Node Ġ= Ġtv Root . array [ 0 ] Ġas ĠPersistent Vector . Node < Int > ĊĊĠĠĠĠĠĠĠ Ġtv Node ĠshouldBe Same Instance As Ġv Node ĊĊĠĠĠĠĠĠĠ Ġtv Node . edit ĠshouldBe Same Instance As Ġv Node . edit ĊĠĠĠĠĠĠĠ Ġtv Node . edit . value . shouldBe Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" invalidate () Ġshould Ġset Ġis Mutable Ġto Ġfalse " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĠĠĠĠĠĠĠ Ġval Ġis Mutable Ġ= Ġtv . root . edit ĊĊĠĠĠĠĠĠĠ Ġtv . invalidate () ĊĊĠĠĠĠĠĠĠ Ġtv . root . edit ĠshouldBe Same Instance As Ġis Mutable ĊĠĠĠĠĠĠĠ Ġtv . root . edit . value . shouldBe Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" assert Mutable ()" Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" when Ġcalled Ġon Ġa Ġmutable Ġtransient , Ġit Ġshouldn 't Ġthrow " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Not Throw < Exception > Ġ{ Ġtv . ensure Editable () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" when Ġcalled Ġon Ġan Ġinvalid ated Ġtransient , Ġit Ġshould Ġthrow " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġshould Throw Exactly < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . ensure Editable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĠshouldBe Ġ" Transient Ġused Ġafter Ġpersistent () Ġcall " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" count " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ""" when Ġcalled Ġon Ġa Ġmutable Ġtransient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġshould Ġreturn Ġthe Ġcount Ġof Ġthe Ġtransient Ġvector """ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . root . edit . should Not BeNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . count ĠshouldBe Exactly Ġv . count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ""" when Ġcalled Ġon Ġa Ġinvalid ated Ġtransient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġshould Ġthrow ĠIllegalStateException """ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġshould Throw Exactly < IllegalStateException > Ġ{ Ġtv . count Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĠshouldBe Ġ" Transient Ġused Ġafter Ġpersistent () Ġcall " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" persistent ()" Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" when Ġcalled Ġon Ġa Ġinvalid ated Ġtransient , Ġwhen Ġit Ġshould Ġthrow " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġshould Throw Exactly < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . persistent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĠshouldBe Ġ" Transient Ġused Ġafter Ġpersistent () Ġcall " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ""" when Ġcalled Ġon Ġa Ġmutable Ġtransient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġshould Ġreturn Ġthe ĠPersistent Vector Ġof Ġthat Ġtransient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġinvalidate Ġit """ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector (*( 1 .. 5 7 ). toList (). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . tail Ġ= Ġv . tail . copyOf ( 3 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvec Ġ= Ġtv . persistent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġvec . root ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . edit . value . shouldBe Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot ĠshouldBe Same Instance As Ġtv . root ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . root . edit . value . shouldBe Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvec . count ĠshouldBe Exactly Ġv . count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvec . shift ĠshouldBe Exactly Ġv . shift ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvec . tail . size ĠshouldBe Exactly Ġ 2 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Arrays Are E quiv ( vec . tail , Ġv . tail ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" conj ( e : E )" Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ" when Ġcalled Ġon Ġan Ġinvalid ated Ġtransient , Ġit Ġshould Ġthrow " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Tv Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPersistent Vector . Transient Vector ( Persistent Vector ( 1 , Ġ 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Tv . invalidate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġshould Throw Exactly < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Tv . conj ( 9 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĠshouldBe Ġ" Transient Ġused Ġafter Ġpersistent () Ġcall " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" when Ġlevel Ġis Ġ 5 Ġand Ġthere Ġis Ġroom Ġin Ġtail , Ġit Ġshould Ġadd Ġto Ġit " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġints Ġ= ĠA rb . int (). filter Ġ{ Ġit Ġ!= Ġi Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . list ( ints , Ġ 0 .. 3 1 )) Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Vec Ġ= ĠPersistent Vector (* list . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Tv Ġ= ĠPersistent Vector . Transient Vector ( temp Vec ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtemp Tv . conj ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Tail Ġ= Ġtv . tail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Root Ġ= Ġtv . root ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . shift ĠshouldBe Exactly ĠSHIFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . count ĠshouldBe Exactly Ġlist . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit . should Not BeNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . array . size ĠshouldBe Exactly Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tail . size ĠshouldBe Exactly Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Arrays Are E quiv ( tv Tail , Ġtemp Vec . tail ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tail [ list . size ] Ġas ĠInt ĠshouldBe Exactly Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" when Ġtail Ġoverflow , Ġit Ġshould Ġpush Ġtail Ġinto Ġthe Ġvec " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġlevel Ġis Ġ 5 , Ġit Ġshould Ġinsert Ġthe Ġtail Ġin Ġroot Ġnode " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Gen Ġ= ĠA rb . list ( Ar b . int (), Ġ( 3 2 .. 1 0 2 4 )). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . size Ġ% Ġ 3 2 Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( list Gen , ĠA rb . int ()) Ġ{ Ġl : ĠList < Int >, Ġi : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Vec Ġ= ĠPersistent Vector (* l . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Tv Ġ= ĠPersistent Vector . Transient Vector ( temp Vec ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtemp Tv . conj ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Tail Ġ= Ġtv . tail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Root Ġ= Ġtv . root ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . shift ĠshouldBe Exactly ĠSHIFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 3 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Most Right Leaf Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ>= Ġ 0 Ġ&& Ġ! is Most Right Leaf Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġtv . root . array [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmost Right Leaf Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġmost Right Leaf . array ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmost Right Leaf . edit ĠshouldBe Same Instance As ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Tv . root . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray ĠshouldBe Ġtemp Vec . tail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmost Right Leaf . edit ĠshouldBe Same Instance As ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Tv . root . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Most Right Leaf Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit . should Not BeNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Most Right Leaf Found . shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . count ĠshouldBe Exactly Ġl . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tail . size ĠshouldBe Exactly Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tail [ 0 ] ĠshouldBe Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" when Ġlevel Ġis Ġ> Ġ 5 , Ġit Ġshould Ġiterate Ġthrough Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevels Ġthen Ġinsert Ġthe Ġtail """ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġ 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġ( 1 .. 1 0 8 8 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Vec Ġ= ĠPersistent Vector (* list . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġtemp Vec . root ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Tv Ġ= ĠPersistent Vector . Transient Vector ( temp Vec ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtemp Tv . conj ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Tail Ġ= Ġtv . tail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Root Ġ= Ġtv . root ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Sub Root Ġ= Ġtv Root . array [ 1 ] Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Left Ġ= Ġtv Sub Root . array [ 0 ] Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmost Right Leaf Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Sub Root . array [ 1 ] Ġas ĠPersistent Vector . Node < Int > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Tv . shift ĠshouldBe Exactly ĠSHIFT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tail [ 0 ] Ġas ĠInt ĠshouldBe Exactly Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Arrays Are E quiv ( most Right Leaf . array , Ġtemp Vec . tail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . count ĠshouldBe Exactly Ġlist . size Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit Ġshould Not Be Same Instance As Ġroot . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit . should Not BeNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Sub Root . edit ĠshouldBe Same Instance As Ġtv Root . edit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Left . edit ĠshouldBe Same Instance As Ġroot . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmost Right Leaf . edit ĠshouldBe Same Instance As ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" when Ġlevel Ġis Ġ> Ġ 5 Ġand Ġthe Ġsub root / path Ġis Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġshould Ġcreate Ġa Ġnew Ġpath Ġthen Ġinsert Ġthe Ġtail """ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġ 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġ( 1 .. 2 0 8 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Vec Ġ= ĠPersistent Vector (* list . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Tv Ġ= ĠPersistent Vector . Transient Vector ( temp Vec ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtemp Tv . conj ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Tail Ġ= Ġtv . tail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Root Ġ= Ġtv . root ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Sub Root Ġ= Ġtv Root . array [ 2 ] Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmost Right Leaf Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Sub Root . array [ 0 ] Ġas ĠPersistent Vector . Node < Int > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . shift ĠshouldBe Exactly ĠSHIFT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Arrays Are E quiv ( most Right Leaf . array , Ġtemp Vec . tail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Tail [ 0 ] ĠshouldBe Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . count ĠshouldBe Exactly Ġlist . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit . should Not BeNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Sub Root . edit ĠshouldBe Same Instance As Ġtv Root . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmost Right Leaf . edit ĠshouldBe Same Instance As ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Root . edit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġroot Ġoverflow , Ġit Ġshould Ġadd Ġ 1 Ġlvl Ġby Ġcreating Ġnew Ġroot " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġ 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġ( 1 .. 1 0 5 6 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Vec Ġ= ĠPersistent Vector (* list . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Tv Ġ= ĠPersistent Vector . Transient Vector ( temp Vec ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtemp Tv . conj ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Root Ġ= Ġtv . root ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv IsMutable Ġ= Ġtv Root . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Root 1 Ġ= Ġtv Root . array [ 0 ] Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Root 2 Ġ= Ġtv Root . array [ 1 ] Ġas ĠPersistent Vector . Node < Int > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmost Right Leaf Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Root 2 . array [ 0 ] Ġas ĠPersistent Vector . Node < Int > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . count ĠshouldBe Exactly Ġlist . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . shift ĠshouldBe Exactly Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . tail [ 0 ] Ġas ĠInt ĠshouldBe Exactly Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Arrays Are E quiv ( most Right Leaf . array , Ġtemp Vec . tail ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv IsMutable ĠshouldBe Same Instance As Ġtemp Tv . root . edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Root 1 . edit ĠshouldBe Same Instance As Ġtv IsMutable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Root 2 . edit ĠshouldBe Same Instance As Ġtv IsMutable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmost Right Leaf . edit ĠshouldBe Same Instance As Ġtv IsMutable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" concurrency " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ 4 5 ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠPersistent Vector < Int >() ĊĊĠĠĠĠĠĠĠ Ġcontin ually ( Duration . seconds ( 1 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransient Vec Ġ= ĠPersistent Vector . Transient Vector ( v ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Action ( 1 0 0 , Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransient Vec . conj ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransient Vec . count ĠshouldBe Exactly Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvec Ġ= Ġtransient Vec . persistent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvec Ġshould Contain Ġ 4 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ