package Ġcom . bk ahl ert . kom mon s . net Ċ Ċ import Ġcom . bk ahl ert . kom mon s . collections . too Ċ import Ġcom . bk ahl ert . kom mon s . math . big Integer Of Decimal String Ċ import Ġcom . bk ahl ert . kom mon s . test . test Each Ċ import Ġcom . bk ahl ert . kom mon s . test . toString Is EqualTo Ċ import Ġorg . junit . jupiter . api . Test Factory Ċ import Ġstri kt . assertions . isEqualTo Ċ Ċ class ĠIPv 4 Subnet Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġip Ġ= ĠIPv 4 Address . parse (" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 ") ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġbe Ġpar s able `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠ Ġ" 0 . 0 . 0 . 0 / 0 " Ġto Ġ" 0 . 0 . 0 . 0 .. 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 ", ĊĠĠĠĠĠĠĠ Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 5 " Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 .. 1 7 2 . 1 8 7 . 2 5 5 . 2 5 5 ", ĊĠĠĠĠĠĠĠ Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 6 " Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 .. 1 7 2 . 1 8 6 . 2 5 5 . 2 5 5 ", ĊĠĠĠĠĠĠĠ Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 7 " Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 .. 1 7 2 . 1 8 6 . 1 2 7 . 2 5 5 ", ĊĠĠĠĠĠĠĠ Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 / 3 2 " Ġto Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 .. 1 7 2 . 1 8 6 . 7 8 . 2 5 0 ", ĊĠĠĠ Ġ) Ġ{ Ġ( subnet String , Ġrange String ) Ġ-> ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġsubnet String . to IPv 4 Subnet () Ġ} Ġthat Ġ{ Ġis EqualTo ( range String . to IPv 4 Subnet ()) Ġ} ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġip 4 Subnet Of ( subnet String ) Ġ} Ġthat Ġ{ Ġis EqualTo ( ip 4 Subnet Of ( range String )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġhave Ġmask `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 0 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" fffe 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" ffff 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" ffff 8 0 0 0 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" ffffffff ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġmask ) Ġ-> ĊĠĠĠĠĠĠĠ Ġwith Ġ{ ĠIPv 4 Subnet . from ( ip , Ġlength ) Ġ}. then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . mask . toString ( 1 6 ) Ġ} Ġthat Ġ{ Ġis EqualTo ( mask ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġhave Ġstart Ġmatching Ġnetwork Ġaddress `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 0 . 0 . 0 . 0 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġnetwork Address ) Ġ-> ĊĠĠĠĠĠĠĠ Ġwith Ġ{ ĠIPv 4 Subnet . from ( ip , Ġlength ) Ġ}. then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . start Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( network Address ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . network Address Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( network Address ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġhave Ġinclusive Ġend Ġmatching Ġbroadcast Ġaddress `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" 1 7 2 . 1 8 7 . 2 5 5 . 2 5 5 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" 1 7 2 . 1 8 6 . 2 5 5 . 2 5 5 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" 1 7 2 . 1 8 6 . 1 2 7 . 2 5 5 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġbroadcast Address ) Ġ-> ĊĠĠĠĠĠĠĠ Ġwith Ġ{ ĠIPv 4 Subnet . from ( ip , Ġlength ) Ġ}. then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . end Inclusive Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( broadcast Address ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . broadcast Address Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( broadcast Address ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġhave Ġusable Ġhost Ġcount `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 4 2 9 4 9 6 7 2 9 6 " Ġtoo Ġ" 4 2 9 4 9 6 7 2 9 4 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" 1 3 1 0 7 2 " Ġtoo Ġ" 1 3 1 0 7 0 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" 6 5 5 3 6 " Ġtoo Ġ" 6 5 5 3 4 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" 3 2 7 6 8 " Ġtoo Ġ" 3 2 7 6 6 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" 1 " Ġtoo Ġ" 1 ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġhost Count String , Ġusable Host Count String ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġhost Count Ġ= Ġbig Integer Of Decimal String ( host Count String ) ĊĠĠĠĠĠĠĠ Ġval Ġusable Host Count Ġ= Ġbig Integer Of Decimal String ( usable Host Count String ) ĊĠĠĠĠĠĠĠ Ġwith Ġ{ ĠIPv 4 Subnet . from ( ip , Ġlength ) Ġ}. then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . host Count Ġ} Ġthat Ġ{ Ġis EqualTo ( host Count ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . usable Host Count Ġ} Ġthat Ġ{ Ġis EqualTo ( usable Host Count ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġhave Ġfirst Ġand Ġusable Ġhost `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 0 . 0 . 0 . 1 " Ġtoo Ġ" 2 5 5 . 2 5 5 . 2 5 5 . 2 5 4 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 1 " Ġtoo Ġ" 1 7 2 . 1 8 7 . 2 5 5 . 2 5 4 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 1 " Ġtoo Ġ" 1 7 2 . 1 8 6 . 2 5 5 . 2 5 4 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 1 " Ġtoo Ġ" 1 7 2 . 1 8 6 . 1 2 7 . 2 5 4 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 " Ġtoo Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġfirst Us able Host , Ġlast Us able Host ) Ġ-> ĊĠĠĠĠĠĠĠ Ġwith Ġ{ ĠIPv 4 Subnet . from ( ip , Ġlength ) Ġ}. then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . first Us able Host Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( first Us able Host ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġthis . last Us able Host Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( last Us able Host ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġbe Ġrepresent able `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 0 . 0 . 0 . 0 / 0 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 5 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 6 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 7 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 / 3 2 ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġrepresentation ) Ġ-> ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ ĠIPv 4 Subnet . from ( ip , Ġlength ) Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( representation ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġbe Ġinstanti atable Ġby Ġdiv `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠ 0 Ġto Ġ" 0 . 0 . 0 . 0 / 0 ", ĊĠĠĠĠĠĠĠĠ 1 5 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 5 ", ĊĠĠĠĠĠĠĠĠ 1 6 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 6 ", ĊĠĠĠĠĠĠĠĠ 1 7 Ġto Ġ" 1 7 2 . 1 8 6 . 0 . 0 / 1 7 ", ĊĠĠĠĠĠĠĠĠ 3 2 Ġto Ġ" 1 7 2 . 1 8 6 . 7 8 . 2 5 0 / 3 2 ", ĊĠĠĠ Ġ) Ġ{ Ġ( length , Ġrepresentation ) Ġ-> ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġip Ġ/ Ġlength Ġ} Ġthat Ġ{ ĠtoString Is EqualTo ( representation ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ