/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 Ġandroidx . ui . input Ċ Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġkotlin . random . Random Ċ Ċ @ Small Test Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠG ap Buffer Test Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġassert Str With Chars ( expected : ĠString , Ġp gb : ĠPartial Gap Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġp gb . toString ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġexpected . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected [ i ], Ġp gb [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ insert _ to _ empty _ string () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" A ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ insert _ and _ append () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" BA ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ insert _ and _ prepend () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 1 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ insert _ and _ insert _ into _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB A ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" AA ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 1 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ prepend () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" A XX ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ insert _ into _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" X AX ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 1 , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ append () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XX A ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 2 , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ prepend _ and _ prepend () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" BA XX ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ prepend _ and _ append () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB XX ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 1 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ prepend _ and _ insert _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX BX ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 2 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert Test _ into Existing Text _ insert _ two _ chars _ and _ append () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB A XX ", ĠPartial Gap Buffer (" XX "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" AA ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 1 , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" BC ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AC ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ two _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" C ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ two _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" A ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ with _ two _ instruction _ from _ ha ed () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" C ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ de let _ with _ two _ instruction _ from _ head _ and _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" B ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ de let _ with _ two _ instruction _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" A ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ three _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars ("", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ insert _ and _ delete _ three _ chars _ with _ three _ instructions () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars ("", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" BC ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ from _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AC ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ two _ chars _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" C ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ two _ chars _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" A ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ two _ chars _ with _ two _ instruction _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" C ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ two _ chars _ with _ two _ instruction _ from _ head _ and _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" B ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ two _ chars _ with _ two _ instruction _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" A ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ three _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars ("", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 3 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Test _ from Existing Text _ delete _ three _ chars _ with _ three _ instructions () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars ("", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ"") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" X BC ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX C ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB X ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 3 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ head _ two _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XC ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 2 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ middle _ two _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 3 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ three _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" X ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 3 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ one _ char _ with _ two _ chars _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XY BC ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ one _ char _ with _ two _ chars _ from _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX Y C ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ one _ char _ with _ two _ chars _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB XY ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 3 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ two _ chars _ with _ two _ chars _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XY C ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 2 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ two _ chars _ with _ two _ chars _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX Y ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 3 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ three _ chars _ with _ two _ char () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XY ", ĠPartial Gap Buffer (" "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 0 , Ġ" ABC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 3 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" X BC ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX C ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB X ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 3 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ two _ chars _ with _ one _ char _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XC ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 2 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ two _ chars _ with _ one _ char _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 3 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ three _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" X ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 3 , Ġ" X ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ one _ char _ with _ two _ chars _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XY BC ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 1 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ one _ char _ with _ two _ chars _ from _ middle () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX Y C ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 2 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ one _ char _ with _ two _ chars _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AB XY ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 2 , Ġ 3 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ two _ chars _ with _ two _ chars _ from _ head () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XY C ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 2 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ two _ chars _ with _ two _ chars _ from _ tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" AX Y ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 1 , Ġ 3 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace Test _ from Existing Text _ three _ chars _ with _ three _ chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Str With Chars (" XY ", ĠPartial Gap Buffer (" ABC "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( 0 , Ġ 3 , Ġ" XY ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCompare Ġwith Ġthe Ġresult Ġof ĠStringBuffer . ĠWe Ġtrust Ġthe ĠStringBuffer Ġworks Ġcorrectly ĊĠĠĠ Ġprivate Ġfun Ġassert Replace ( ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġstr : ĠString , ĊĠĠĠĠĠĠĠ Ġsb : ĠStringBuffer , ĊĠĠĠĠĠĠĠ Ġgb : ĠPartial Gap Buffer ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsb . replace ( start , Ġend , Ġstr ) ĊĠĠĠĠĠĠĠ Ġgb . replace ( start , Ġend , Ġstr ) ĊĠĠĠĠĠĠĠ Ġassert Str With Chars ( sb . toString (), Ġgb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠLONG _ INIT _ TEXT Ġ= Ġ" ABCDEF GH IJ KL MN OP Q RST UV W XYZ ". repeat ( 2 5 6 ) ĊĠĠĠ Ġprivate Ġval ĠSH ORT _ TEXT Ġ= Ġ" A " ĊĠĠĠ Ġprivate Ġval ĠMED IUM _ TEXT Ġ= Ġ" Hello , ĠWorld " ĊĠĠĠ Ġprivate Ġval ĠLONG _ TEXT Ġ= Ġ" abcdefgh ijkl mnopqrst uvw xyz ". repeat ( 1 6 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlong Text Test _ keep _ insertion () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuffer ( LONG _ INIT _ TEXT ) ĊĠĠĠĠĠĠĠ Ġval Ġgb Ġ= ĠPartial Gap Buffer ( LONG _ INIT _ TEXT ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġ 2 5 6 Ġ// Ġcursor ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc , ĠSH ORT _ TEXT , Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġc Ġ+= ĠSH ORT _ TEXT . length ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc , ĠMED IUM _ TEXT , Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġc Ġ+= ĠMED IUM _ TEXT . length ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc , ĠLONG _ TEXT , Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġc Ġ+= ĠLONG _ TEXT . length ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc , ĠMED IUM _ TEXT , Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġc Ġ+= ĠMED IUM _ TEXT . length ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc , ĠSH ORT _ TEXT , Ġsb , Ġgb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlong Text Test _ keep _ deletion () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuffer ( LONG _ INIT _ TEXT ) ĊĠĠĠĠĠĠĠ Ġval Ġgb Ġ= ĠPartial Gap Buffer ( LONG _ INIT _ TEXT ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġ 2 0 4 8 Ġ// Ġcursor ĊĠĠĠĠĠĠĠ Ġ// ĠForward Ġdeletion ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc Ġ+ Ġ 1 0 , Ġ"", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc Ġ+ Ġ 1 0 0 , Ġ"", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc Ġ+ Ġ 1 0 0 0 , Ġ"", Ġsb , Ġgb ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠBack spacing ĊĠĠĠĠĠĠĠ Ġassert Replace ( c Ġ- Ġ 1 0 , Ġc , Ġ"", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġc Ġ-= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġassert Replace ( c Ġ- Ġ 1 0 0 , Ġc , Ġ"", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġc Ġ-= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġassert Replace ( c Ġ- Ġ 1 0 0 0 , Ġc , Ġ"", Ġsb , Ġgb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlong Text Test _ far Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuffer ( LONG _ INIT _ TEXT ) ĊĠĠĠĠĠĠĠ Ġval Ġgb Ġ= ĠPartial Gap Buffer ( LONG _ INIT _ TEXT ) ĊĊĠĠĠĠĠĠĠ Ġassert Replace ( 1 0 2 4 , Ġ 1 0 2 4 , Ġ" Hello , ĠWorld ", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠ Ġassert Replace ( 1 2 8 , Ġ 1 2 8 , ĠLONG _ TEXT , Ġsb , Ġgb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Insert Delete St ress Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuffer ( LONG _ INIT _ TEXT ) ĊĠĠĠĠĠĠĠ Ġval Ġgb Ġ= ĠPartial Gap Buffer ( LONG _ INIT _ TEXT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRandom ( 1 0 Ġ/* Ġfix Ġthe Ġseed Ġfor Ġreproduction Ġ*/) ĊĊĠĠĠĠĠĠĠ Ġval ĠINSERT _ TEXT S Ġ= ĠarrayOf ( SHORT _ TEXT , ĠMED IUM _ TEXT , ĠLONG _ TEXT ) ĊĠĠĠĠĠĠĠ Ġval ĠDEL _ LENGTH S Ġ= ĠarrayOf ( 1 , Ġ 1 0 , Ġ 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġc Ġ= ĠLONG _ INIT _ TEXT . length Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( r . nextInt () Ġ% Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ Ġ// Ġinsert ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtxt Ġ= ĠINSERT _ TEXT S . random ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc , Ġtxt , Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ+= Ġtxt . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ Ġ// Ġforward Ġdelete ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc Ġ+ ĠDEL _ LENGTH S . random ( r ), Ġ"", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ Ġ// Ġback spacing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen Ġ= ĠDEL _ LENGTH S . random ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Replace ( c Ġ- Ġlen , Ġc , Ġ"", Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ-= Ġlen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ Ġ// Ġreplacing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtxt Ġ= ĠINSERT _ TEXT S . random ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen Ġ= ĠDEL _ LENGTH S . random ( r ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Replace ( c , Ġc Ġ+ Ġlen , Ġtxt , Ġsb , Ġgb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }