/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠB loom berg ĠFinance ĠL . P . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . bloom berg . se le kt . commons Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Exception OfType Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertSame Ċ import Ġkotlin . test . assertTrue Ċ Ċ internal Ġclass ĠLinked Deque Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput Last Then Poll Last () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( obj , Ġpoll Last ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpoll Last Null () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertNull ( Linked Deque < Any >(). poll Last ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠisEmpty () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Linked Deque < Any >(). isEmpty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Size One False When Empty () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( Linked Deque < Any >(). has Size One ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Size One False When Two () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( Linked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 2 ) Ġ{ Ġput First ( Any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. has Size One ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Size One True () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Linked Deque < Any >(). apply Ġ{ Ġput First ( Any ()) Ġ}. has Size One ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpoll Last In Order () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( one ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( two ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( one , Ġpoll Last ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( two , Ġpoll Last ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput Poll Put () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( one ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( two ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( two , Ġpoll Last ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove First () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( one ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( two ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( one , Ġpoll First Ġ{ Ġit Ġ=== Ġone Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( two , Ġpoll First Ġ{ Ġit Ġ=== Ġtwo Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( isEmpty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreverse Iterate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠAny () ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= ĠAny () ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( one ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( two ) ĊĠĠĠĠĠĠĠ Ġ}. reverse Mutable Iterator (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it . hasNext ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( one , Ġit . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( two , Ġit . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( it . hasNext ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreverse Iterate Empty () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( Linked Deque < Any >(). reverse Mutable Iterator (). hasNext ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreverse Iterate Empty Throws () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat Exception OfType ( NoSuch ElementException :: class . java ). is Thrown By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). reverse Mutable Iterator (). next () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreverse Remove Empty Throws () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat Exception OfType ( Unsupported OperationException :: class . java ). is Thrown By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). reverse Mutable Iterator (). remove () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreverse Iterate Then Throw () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( Any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Mutable Iterator (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Exception OfType ( NoSuch ElementException :: class . java ). is Thrown By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Single Via Reverse Iterator () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( Any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Mutable Iterator (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it . hasNext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( isEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove All While Reverse Iter ating () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 5 ) Ġ{ Ġput First ( Any ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġreverse Mutable Iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( isEmpty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Some While Reverse Iter ating () Ġ{ ĊĠĠĠĠĠĠĠ ĠLinked Deque < Any >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 3 ) Ġ{ Ġput First ( Any ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( one ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput First ( two ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġreverse Mutable Iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( one , Ġpoll Last ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( two , Ġpoll Last ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ