import ĠDay 2 2 . Cub oid Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Test Ċ import Ġutils . Component 4 . X Ċ import Ġutils . Component 4 . Y Ċ import Ġutils . Component 4 . Z Ċ import Ġutils . Point 3 i Ċ Ċ class ĠDay 2 2 Test Ġ{ ĊĠ Ġfun Ġcub oid ( x 1 : ĠInt , Ġy 1 : ĠInt , Ġz 1 : ĠInt , Ġx 2 : ĠInt , Ġy 2 : ĠInt , Ġz 2 : ĠInt ) Ġ= ĊĠĠĠ ĠC ub oid ( Point 3 i ( x 1 , Ġy 1 , Ġz 1 ), ĠPoint 3 i ( x 2 , Ġy 2 , Ġz 2 )) ĊĊĠ Ġ@ Test Ġfun Ġtest Cut X () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( X , Ġ 5 ) ĊĠĠĠ ĠassertThat ( l ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 5 , Ġ 1 0 , Ġ 1 0 )) ĊĠĠĠ ĠassertThat ( r ). isEqualTo ( cub oid ( 5 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Cut X Start Side () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( X , Ġ 0 ) ĊĠĠĠ ĠassertThat ( l ). isNull () ĊĠĠĠ ĠassertThat ( r ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Cut X Start Side 1 () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( X , Ġ 1 ) ĊĠĠĠ ĠassertThat ( l ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 , Ġ 1 0 , Ġ 1 0 )) ĊĠĠĠ ĠassertThat ( r ). isEqualTo ( cub oid ( 1 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Cut X End Side () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( X , Ġ 1 0 ) ĊĠĠĠ ĠassertThat ( l ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠĠĠ ĠassertThat ( r ). isNull () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Cut X End Side 1 () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( X , Ġ 9 ) ĊĠĠĠ ĠassertThat ( l ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 9 , Ġ 1 0 , Ġ 1 0 )) ĊĠĠĠ ĠassertThat ( r ). isEqualTo ( cub oid ( 9 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Cut Y () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( Y , Ġ 5 ) ĊĠĠĠ ĠassertThat ( l ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 5 , Ġ 1 0 )) ĊĠĠĠ ĠassertThat ( r ). isEqualTo ( cub oid ( 0 , Ġ 5 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Cut Z () Ġ{ ĊĠĠĠ Ġval Ġ( l , Ġr ) Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ). cut ( Z , Ġ 5 ) ĊĠĠĠ ĠassertThat ( l ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 5 )) ĊĠĠĠ ĠassertThat ( r ). isEqualTo ( cub oid ( 0 , Ġ 0 , Ġ 5 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Minus End () Ġ{ ĊĠĠĠ Ġval Ġcub oids Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ- Ġcub oid ( 5 , Ġ 5 , Ġ 5 , Ġ 1 5 , Ġ 1 5 , Ġ 1 5 ) ĊĠĠĠ ĠassertThat ( cub oids ). contains Exactly ( ĊĠĠĠĠĠ Ġ// Ġstart x ĊĠĠĠĠĠ Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 5 , Ġ 1 0 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 4 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġstart y ĊĠĠĠĠĠ Ġcub oid ( 5 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 5 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 5 , Ġ 5 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġstart z ĊĠĠĠĠĠ Ġcub oid ( 5 , Ġ 5 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 5 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 5 , Ġ 5 , Ġ 5 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġintersection ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Minus Start () Ġ{ ĊĠĠĠ Ġval Ġcub oids Ġ= Ġcub oid ( 5 , Ġ 5 , Ġ 5 , Ġ 1 5 , Ġ 1 5 , Ġ 1 5 ) Ġ- Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) ĊĠĠĠ ĠassertThat ( cub oids ). contains Exactly ( ĊĠĠĠĠĠ Ġ// Ġend x ĊĠĠĠĠĠ Ġcub oid ( 1 0 , Ġ 5 , Ġ 5 , Ġ 1 5 , Ġ 1 5 , Ġ 1 5 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 5 , Ġ 5 , Ġ 5 , Ġ 1 0 , Ġ 1 5 , Ġ 1 5 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġend y ĊĠĠĠĠĠ Ġcub oid ( 5 , Ġ 1 0 , Ġ 5 , Ġ 1 0 , Ġ 1 5 , Ġ 1 5 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 5 , Ġ 5 , Ġ 5 , Ġ 1 0 , Ġ 1 0 , Ġ 1 5 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġend z ĊĠĠĠĠĠ Ġcub oid ( 5 , Ġ 5 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 5 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 5 , Ġ 5 , Ġ 5 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġintersection ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Minus Outside () Ġ{ ĊĠĠĠ Ġval Ġcub oids Ġ= Ġcub oid ( 3 , Ġ 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 5 ) Ġ- Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) ĊĠĠĠ ĠassertThat ( cub oids ). isEmpty () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Intersect Inside () Ġ{ ĊĠĠĠ Ġval Ġcub oid Ġ= Ġcub oid ( 3 , Ġ 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 5 ) Ġintersect Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) ĊĠĠĠ ĠassertThat ( cub oid ). isEqualTo ( cub oid ( 3 , Ġ 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 5 )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Minus Inside () Ġ{ ĊĠĠĠ Ġval Ġcub oids Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ- Ġcub oid ( 3 , Ġ 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 5 ) ĊĠĠĠ ĠassertThat ( cub oids ). contains At Least ( ĊĠĠĠĠĠ Ġ// Ġstart x ĊĠĠĠĠĠ Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 3 , Ġ 1 0 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 3 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġend x ĊĠĠĠĠĠ Ġcub oid ( 5 , Ġ 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 3 , Ġ 0 , Ġ 0 , Ġ 5 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġstart y ĊĠĠĠĠĠ Ġcub oid ( 3 , Ġ 0 , Ġ 0 , Ġ 5 , Ġ 3 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 3 , Ġ 3 , Ġ 0 , Ġ 5 , Ġ 1 0 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġend y ĊĠĠĠĠĠ Ġcub oid ( 3 , Ġ 5 , Ġ 0 , Ġ 5 , Ġ 1 0 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 3 , Ġ 3 , Ġ 0 , Ġ 5 , Ġ 5 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġstart z ĊĠĠĠĠĠ Ġcub oid ( 3 , Ġ 3 , Ġ 0 , Ġ 5 , Ġ 5 , Ġ 3 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 3 , Ġ 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 1 0 ) Ġ-> Ġsplit Ġfurther ĊĊĠĠĠĠĠ Ġ// Ġend z ĊĠĠĠĠĠ Ġcub oid ( 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 5 , Ġ 1 0 ), ĊĠĠĠĠĠ Ġ// Ġcub oid ( 3 , Ġ 3 , Ġ 3 , Ġ 5 , Ġ 5 , Ġ 5 ) Ġ-> Ġintersection ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Minus Edge () Ġ{ ĊĠĠĠ Ġval Ġleft Ġ= Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 5 , Ġ 5 , Ġ 5 ) ĊĠĠĠ Ġval Ġright Ġ= Ġcub oid ( 4 , Ġ 0 , Ġ 0 , Ġ 8 , Ġ 5 , Ġ 5 ) ĊĠĠĠ ĠassertThat ( left Ġ- Ġright ). contains Exactly ( ĊĠĠĠĠĠ Ġcub oid ( 0 , Ġ 0 , Ġ 0 , Ġ 4 , Ġ 5 , Ġ 5 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠassertThat ( right Ġ- Ġleft ). contains Exactly ( ĊĠĠĠĠĠ Ġcub oid ( 5 , Ġ 0 , Ġ 0 , Ġ 8 , Ġ 5 , Ġ 5 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠassertThat ( left Ġintersect Ġright ). isEqualTo ( cub oid ( 4 , Ġ 0 , Ġ 0 , Ġ 5 , Ġ 5 , Ġ 5 )) ĊĠ Ġ} Ċ } Ċ