package Ġio . a def arge . k osm . dsl Ċ Ċ import Ġio . a def arge . k osm . core . node Ċ import Ġio . a def arge . k osm . core . way Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNot Equals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠWay Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġinstantiate Ġa Ġway `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġway Ġ{} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( way . nodes . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( way . tags . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġinstantiate Ġa Ġway Ġin Ġa Ġgraph `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ Ġway Ġ{} Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġgraph . ways . size ) ĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( way . nodes . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( way . tags . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġinstantiate Ġa Ġway Ġwith Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ Ġway ( 1 ) Ġ{ Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġway . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġ` can Ġstill Ġinstantiate Ġa Ġway Ġwith Ġid Ġusing Ġthe Ġid Ġin Ġthe ĠBuilder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ Ġway Ġ{ Ġid Ġ= Ġ 1 Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġway . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġinstantiate Ġa Ġway Ġwith Ġtags `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġway Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" high way " Ġto Ġ" pe de stri an " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" level " Ġto Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġway . tags . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" pe de stri an ", Ġway . tags [" high way "]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġway . tags [" level "]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġinstantiate Ġa Ġway Ġwith Ġnodes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġway Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ{ Ġrandom Coordinate () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ{ Ġrandom Coordinate () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ{ Ġrandom Coordinate () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġway . nodes . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġgraph . nodes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġinstantiate Ġnodes Ġand Ġlink Ġit Ġin Ġa Ġway Ġby Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 0 ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 1 ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 2 ) Ġ{ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġway Ġ{ Ġnodes ( 0 , Ġ 1 , Ġ 2 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 0 L , Ġ 1 L , Ġ 2 L ), Ġway . nodes . map Ġ{ Ġit . id Ġ}) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġgraph . nodes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġmix Ġinstantiation Ġof Ġnode Ġinside Ġand Ġoutside Ġof Ġway `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 0 ) Ġ{ Ġtags Ġ{ Ġ" node " Ġto Ġ" 0 " Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 1 ) Ġ{ Ġtags Ġ{ Ġ" node " Ġto Ġ" 1 " Ġ} Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġway Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ{ Ġtags Ġ{ Ġ" node " Ġto Ġ" 2 " Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġway . nodes . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġway . nodes . first (). id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġway . nodes . last (). id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġgraph . nodes . size ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" 0 ", Ġgraph . node ( 0 ). tags [" node "]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġgraph . node ( 1 ). tags [" node "]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġmerge Ġmultiple Ġdeclaration Ġof Ġways `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġway ( 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ" b " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes ( 0 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġway ( 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ{ Ġ" c " Ġto Ġ" d " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes ( 2 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġgraph . ways . size ) ĊĠĠĠĠĠĠĠ Ġval Ġway Ġ= Ġgraph . ways . first () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġway . id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 2 , Ġ 3 , Ġ 4 ), Ġway . nodes . map Ġ{ Ġit . id . toInt () Ġ}) ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" a " Ġto Ġ" b ", Ġ" c " Ġto Ġ" d "), Ġway . tags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġdeclare Ġmultiple Ġways Ġwithout Ġover writing Ġthem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġo sm Graph Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġway Ġ{ Ġtags Ġ{ Ġ" decl " Ġto Ġ" 0 " Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġway ( 1 ) Ġ{ Ġtags Ġ{ Ġ" decl " Ġto Ġ" 1 " Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġway Ġ{ Ġtags Ġ{ Ġ" decl " Ġto Ġ" 2 " Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġgraph . ways . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġgraph . ways . count Ġ{ Ġit . id Ġ== Ġ 1 L Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġway 1 Ġ= Ġgraph . way ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" decl " Ġto Ġ" 1 "), Ġway 1 . tags ) ĊĊĠĠĠĠĠĠĠ Ġval Ġanonymous W ays Ġ= Ġgraph . ways . filter Ġ{ Ġit . id Ġ!= Ġ 1 L Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġanonymous W ays . size ) ĊĠĠĠĠĠĠĠ Ġval Ġan on 1 Ġ= Ġanonymous W ays . first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġan on 1 . tags . size ) ĊĠĠĠĠĠĠĠ Ġval Ġan on 2 Ġ= Ġanonymous W ays . last () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġan on 2 . tags . size ) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( anon 1 . tags , Ġan on 2 . tags ) ĊĠĠĠ Ġ} Ċ } Ċ