package Ġorg . k objects . parser lib . examples . pl 0 Ċ Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠPl 0 Test Ġ{ ĊĠĠĠ Ġval Ġf izz Bu zz Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVAR Ġx ; ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPROCEDURE Ġf izz Bu zz ; ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBEGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ:= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWH ILE Ġx Ġ<= Ġ 2 0 ĠDO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBEGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIF Ġx Ġ/ Ġ 3 Ġ* Ġ 3 Ġ= Ġx ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBEGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIF Ġx Ġ/ Ġ 5 Ġ* Ġ 5 Ġ= Ġx ĠTHEN Ġ! Ġ- 1 5 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIF Ġx Ġ/ Ġ 5 Ġ* Ġ 5 Ġ# Ġx ĠTHEN Ġ! Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIF Ġx Ġ/ Ġ 3 Ġ* Ġ 3 Ġ# Ġx ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBEGIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIF Ġx Ġ/ Ġ 5 Ġ* Ġ 5 Ġ= Ġx ĠTHEN Ġ! Ġ- 5 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIF Ġx Ġ/ Ġ 5 Ġ* Ġ 5 Ġ# Ġx ĠTHEN Ġ! Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ:= Ġx Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEND ; ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠCALL Ġf izz Bu zz . ĊĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest F izz Bu zz () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= Ġparse Program ( f izz Bu zz ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠĠĠĠĠ Ġprogram . eval ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresult . add ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrow ĠUnsupportedOperationException () Ġ}) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 1 , Ġ 2 , Ġ- 3 , Ġ 4 , Ġ- 5 , Ġ- 3 , Ġ 7 , Ġ 8 , Ġ- 3 , Ġ- 5 , Ġ 1 1 , Ġ- 3 , Ġ 1 3 , Ġ 1 4 , Ġ- 1 5 , Ġ 1 6 , Ġ 1 7 , Ġ- 3 , Ġ 1 9 , Ġ- 5 ), Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest String ification () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= Ġparse Program ( f izz Bu zz ) ĊĠĠĠĠĠĠĠ Ġval Ġre parsed 1 Ġ= Ġparse Program ( program . toString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( program , Ġre parsed 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġmay Ġinsert Ġextra Ġpare ns Ġin Ġexpressions ĊĠĠĠĠĠĠĠ Ġval Ġre parsed 2 Ġ= Ġparse Program ( re parsed 1 . toString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( re parsed 1 . toString (), Ġre parsed 2 . toString ()) ĊĠĠĠ Ġ} Ċ }