package Ġcom . r 3 . demos . ub in 2 a . plan . graph Ċ Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠNode Sequence Tests Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġund irect ed Ġsequence Ġfrom Ġsimple Ġcycle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= ĠgetNode Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġund irect ed Ġsequence Ġfrom Ġtwo Ġoverlapping Ġcycles `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ', Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' B ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= ĠgetNode Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġund irect ed Ġsequence Ġfrom Ġtwo Ġoverlapping Ġcycles Ġwith Ġcommon Ġedges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B ', Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġto ĠlistOf (' E ', Ġ' A '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' E ' Ġto ĠlistOf (' A ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Edges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġto ĠlistOf (' E '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' E ' Ġto ĠlistOf (' A ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= ĠgetNode Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( expected Edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġund irect ed Ġsequence Ġfrom Ġthree Ġoverlapping Ġcycles Ġwith Ġcommon Ġedges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ', Ġ' C ', Ġ' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġto ĠlistOf (' C ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Edges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= ĠgetNode Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( expected Edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġund irect ed Ġsequence Ġfrom Ġoverlapping Ġcycles Ġwith Ġcommon Ġun id irectional Ġedges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ', Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġto ĠlistOf (' C ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Edges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' D ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= ĠgetNode Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( expected Edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġdirected Ġsequence Ġfrom Ġsimple Ġcycle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġget Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġdirected Ġsequence Ġfrom Ġtwo Ġoverlapping Ġcycles `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ', Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' B ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġget Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġdirected Ġsequence Ġfrom Ġtwo Ġoverlapping Ġcycles Ġwith Ġcommon Ġedges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B ', Ġ' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' C '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġto ĠlistOf (' E ', Ġ' A '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' E ' Ġto ĠlistOf (' A ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġget Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 8 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġdirected Ġsequence Ġfrom Ġthree Ġoverlapping Ġcycles Ġwith Ġcommon Ġedges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' A ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' B ' Ġto ĠlistOf (' A ', Ġ' C ', Ġ' D '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' C ' Ġto ĠlistOf (' B '), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġto ĠlistOf (' C ') ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġget Sequence From Edges ( edges ) ĊĠĠĠĠĠĠĠ Ġassert Valid Sequence ( edges , Ġsequence ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 7 , Ġsequence . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Valid Sequence ( edges : ĠMap < Char , ĠList < Char >>, Ġactual : ĠNode Sequence < Char >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġactual . toList (). plus ( listOf ( actual . first ())) ĊĠĠĠĠĠĠĠ Ġfor Ġ(( node , Ġconnected Nodes ) Ġin Ġedges ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( connected Node Ġin Ġconnected Nodes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( actual . contains ( node )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( actual . contains ( connected Node )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Sub List ( list , ĠlistOf ( node , Ġconnected Node )) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Sub List ( list , ĠlistOf ( connected Node , Ġnode )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġfind Sub List ( list : ĠList < T >, Ġsub List : ĠList < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġouter @ Ġfor Ġ( i Ġin Ġ 0 .. ( list . size Ġ- Ġsub List . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġsub List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list [ i Ġ+ Ġj ] Ġ!= Ġsub List [ j ]) Ġ{ Ġcontinue @ outer Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ Ċ } Ċ