package Ġpattern Ċ Ċ import Ġcard . Prime Ċ import Ġcard . Suit Ċ import Ġgame .* Ċ import Ġstate . phase . Play Phase State Ċ import Ġstate . test . GameState Builder Ċ import Ġutil .* Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertIs Ċ Ċ class ĠFollow Pattern Test Ġ: ĠGameState TestBase () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġleader Id Ġ= Ġ" leader " ĊĠĠĠ Ġoverride Ġfun Ġconfigure Builder Before Test ( builder : ĠGameState Builder ) Ġ= Ġbuilder . run Ġ{ ĊĠĠĠĠĠĠĠ Ġcur Phase State Ġ= ĠPlay Phase State ( leader Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsingle Ġnormal Ġfollow `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 7 ) ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 8 ) ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġfollow . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Normal Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġmulti - same Ġnormal Ġfollow `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 7 ) Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 8 ) Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġfollow . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Normal Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġs iblings Ġnormal Ġfollow `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= Ġ( C ( 7 ) Ġ+ ĠC ( 8 )) Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= Ġ( C ( 8 ) Ġ+ ĠC ( 9 )) Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġfollow . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Normal Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġnormal Ġfollow Ġwhen Ġboth Ġare Ġprime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 5 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠB J Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġfollow . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Normal Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinvalid Ġwhen Ġlead Ġis Ġprime , Ġfollow Ġis Ġnon - prime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 5 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 7 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠB J ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Invalid Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġprime , Ġfollow Ġis Ġnon - prime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 5 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 7 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinvalid Ġwhen Ġlead Ġis Ġnon - prime , Ġfollow Ġis Ġnot Ġex hausted `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( A ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠH ( 6 ) Ġ+ ĠC ( 7 ) ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ* Ġ 2 ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Invalid Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġnormal Ġwhen Ġlead Ġis Ġnon - prime , Ġfollow Ġis Ġsame Ġsuit `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( A ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 7 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠB J ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Normal Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġnon - prime , Ġfollow Ġbreak Ġrules `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( A ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 5 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠB J ). card Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Follow ed Map Ġ= Ġmap Of ( Prime () Ġto Ġset Of ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsuperior Ġwhen Ġlead Ġis Ġnon - prime , Ġfollow Ġis Ġprime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( A ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 5 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠB J ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Super ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġnon - prime , Ġfollow Ġhas Ġno Ġsame Ġsuit `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( A ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠH ( 8 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠB J ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinvalid Ġwhen Ġlead Ġis Ġprime , Ġfollow Ġis Ġgarbage Ġnot Ġex hausted `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 5 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠB J Ġ+ ĠC ( 7 ) ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ* Ġ 2 ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Invalid Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinvalid Ġwhen Ġlead Ġis Ġnon - prime , Ġfollow Ġis Ġgarbage Ġnot Ġex hausted `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠC ( 8 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠH ( 9 ) Ġ+ ĠC ( 7 ) ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ* Ġ 2 ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Invalid Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġprime - siblings Ġand Ġfollow Ġis Ġsame Ġmultis `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= Ġ( C ( 2 ) Ġ+ ĠC ( 3 )) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= Ġ( H ( 2 ) Ġ+ ĠC ( 3 )) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠB J Ġ+ ĠS J ). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġmulti Ġprime Ġand Ġfollow Ġis Ġnot Ġsame `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= ĠB J Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠB J Ġ* Ġ 2 Ġ+ ĠS J ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġfollow . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Has Non Same PO SS Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġs iblings Ġand Ġfollow Ġis Ġpartial Ġbiggest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= Ġ( C ( 2 ) Ġ+ ĠC ( 3 )) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= Ġ( H ( 2 )) Ġ* Ġ 2 Ġ+ ĠB J Ġ+ ĠS J ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠH ( 5 )). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġs iblings Ġand Ġfollow Ġis Ġall Ġthe Ġsame `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= Ġ( C ( 2 ) Ġ+ ĠC ( 3 )) Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠH ( 2 ) Ġ* Ġ 6 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠC ( 5 )). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinfer ior Ġwhen Ġlead Ġis Ġs iblings Ġand Ġfollow Ġis Ġpartial Ġall Ġthe Ġsame Ġand Ġpartial Ġpairs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlead Ġ= Ġ( C ( 7 ) Ġ+ ĠC ( 8 ) Ġ+ ĠC ( 9 ) Ġ+ ĠC ( 1 0 )) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= ĠC ( 2 ) Ġ* Ġ 4 Ġ+ ĠC ( 3 ) Ġ* Ġ 4 ĊĠĠĠĠĠĠĠ Ġgame State Ġ= Ġgame State Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprime Suit Ġ= ĠS uit . CL UB S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Set Ġ= Ġ( follow Ġ+ ĠC ( 5 )). card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Player State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġleader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Play Set Ġ= Ġlead . card Set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġfollow Type Ġ= Ġget Follow Pattern ( follow . card Set , ĠuserId , Ġgame State ) ĊĠĠĠĠĠĠĠ Ġassert Is < Infer ior Follow >( follow Type ) ĊĠĠĠ Ġ} Ċ }