package Ġspace . k science . gd ml Ċ Ċ import Ġkotlin . math . PI Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠG d ml Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġre code C ubes () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc ubes Ġ= ĠG d ml Show Case . c ubes () ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġc ubes . encode ToString () ĊĠĠĠĠĠĠĠ Ġprintln ( string ) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġstring . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrestored : ĠG d ml Ġ= ĠG d ml . decode FromString ( string ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( c ubes . sol ids . content . size , Ġrestored . sol ids . content . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġre code I ax o () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb aby I ax o Ġ= ĠG d ml Show Case . b aby I ax o () ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġb aby I ax o . encode ToString () ĊĠĠĠĠĠĠĠ Ġprintln ( string ) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġstring . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrestored : ĠG d ml Ġ= ĠG d ml . decode FromString ( string ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( b aby I ax o . sol ids . content . size , Ġrestored . sol ids . content . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġserialization () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgd ml Ġ= ĠG d ml Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefine Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation ( name Ġ= Ġ" a ", Ġy Ġ= ĠPI Ġ/ Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( name Ġ= Ġ" pos . b ", Ġz Ġ= Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsol ids Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Box Ġ= Ġbox ( 1 0 0 . 0 , Ġ 1 0 0 . 0 , Ġ 1 0 0 . 0 , Ġ" my Box ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Box Ġ= Ġbox ( 1 0 0 . 0 , Ġ 1 0 0 . 0 , Ġ 1 0 0 . 0 , Ġ" other Box ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunion ( my Box , Ġother Box , Ġ" a Union ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst position ( x Ġ= Ġ 3 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst rotation ( y Ġ= ĠPI Ġ/ Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠG d ml . encode ToString ( gd ml ) ĊĠĠĠĠĠĠĠ Ġprintln ( string ) ĊĠĠĠĠĠĠĠ Ġval Ġrestored : ĠG d ml Ġ= ĠG d ml . decode FromString ( string ) ĊĠĠĠĠĠĠĠ Ġprintln ( restore d . toString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( gd ml . sol ids . content [ 0 ], Ġrestored . sol ids . content [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( gd ml . sol ids . content [ 1 ], Ġrestored . sol ids . content [ 1 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( gd ml . sol ids . content [ 2 ], Ġrestored . sol ids . content [ 2 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( gd ml . sol ids , Ġrestored . sol ids ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsub traction () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgd ml Ġ= ĠG d ml Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Ġ= Ġsol ids . box ( 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 , Ġ" the Box ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġor b Ġ= Ġsol ids . orb ( 1 0 0 , Ġ" the Or b ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubtract Ġ= Ġsol ids . sub traction ( cube , Ġor b , Ġ" sub ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( x Ġ= Ġ 1 0 0 , Ġy Ġ= Ġ 0 , Ġz Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( gd ml . encode ToString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġauto Naming () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgd ml Ġ= ĠG d ml Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube 1 Ġ= Ġsol ids . box ( 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube 2 Ġ= Ġsol ids . box ( 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube 3 Ġ= Ġsol ids . box ( 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġair Ġ= Ġmaterials . is otope (" G 4 _ AIR ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume 1 Ġ= Ġstructure . volume ( air , Ġcube 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume 2 Ġ= Ġstructure . volume ( air , Ġcube 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume 3 Ġ= Ġstructure . volume ( air , Ġcube 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworld Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( volume 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( volume 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( volume 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( gd ml ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġgd ml . world . resolve ( gd ml )?. phys Volumes ?. size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrotation Group () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgd ml Ġ= ĠG d ml Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Ġ= Ġsol ids . box ( 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġair Ġ= Ġmaterials . is otope (" G 4 _ AIR ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstructure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Volume Ġ= Ġvolume ( air , Ġcube ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġassembly Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 5 ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( cube Volume ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ{ Ġz Ġ= Ġindex Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotated Ġ= Ġassembly Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= ĠPI Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ- PI Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld Ġ= Ġassembly Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( rot ated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= ĠPI Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphys Volume ( rot ated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ- PI Ġ/ Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( gd ml ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġsame Ġas Ġ[ rotation Group ], Ġbut Ġwith Ġa Ġnew Ġbuilder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgroup Builder () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgd ml Ġ= ĠG d ml Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Ġ= Ġsol ids . box ( 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġair Ġ= Ġmaterials . is otope (" G 4 _ AIR ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Ġ= Ġbuild Group (" group ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 5 ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsolid ( cube , Ġmodifier Ġ= Ġposition ( z Ġ= Ġindex Ġ* Ġ 1 0 0 ). material ( air )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotated Ġ= Ġbuild Group (" rot ated ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup ( inner , Ġmodifier Ġ= Ġrotation ( x Ġ= ĠPI Ġ/ Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup ( inner , Ġmodifier Ġ= Ġrotation ( x Ġ= Ġ- PI Ġ/ Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworld Ġ= Ġbuild Group (" world ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup ( rot ated , Ġmodifier Ġ= Ġrotation ( y Ġ= ĠPI Ġ/ Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup ( rot ated , Ġmodifier Ġ= Ġrotation ( y Ġ= Ġ- PI Ġ/ Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( gd ml ) ĊĠĠĠ Ġ} Ċ }