package Ġcom . cur tis lb . ad vent of code . year 2 0 1 9 . day 1 2 . body Ċ Ċ import Ġcom . cur tis lb . ad vent of code . common . collection . Mutable Int Vector Ċ import Ġcom . cur tis lb . ad vent of code . common . testing . create TempFile Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . test . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . io . TempDir Ċ Ċ /** Ċ Ġ* ĠTests Ġ[ N Body System ]. Ċ Ġ*/ Ċ class ĠN Body System Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Construct With Empty File (@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtemp Dir . create TempFile () ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠN Body System ( file ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( emptyList (), Ġsystem . bodies ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsystem . total Energy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sim ulate And Reset (@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtemp Dir . create TempFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x =- 1 , Ġy = 0 , Ġz = 2 > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x = 2 , Ġy =- 1 0 , Ġz =- 7 > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x = 4 , Ġy =- 8 , Ġz = 8 > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x = 3 , Ġy = 5 , Ġz =- 1 > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠN Body System ( file ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector (- 1 , Ġ 0 , Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector ( 2 , Ġ- 1 0 , Ġ- 7 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector ( 4 , Ġ- 8 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector ( 3 , Ġ 5 , Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . bodies ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsystem . total Energy ) ĊĊĠĠĠĠĠĠĠ Ġsystem . simulate () ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 2 , Ġ- 1 , Ġ 1 ), Ġvelocity Ġ= ĠMutable Int Vector ( 3 , Ġ- 1 , Ġ- 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 3 , Ġ- 7 , Ġ- 4 ), Ġvelocity Ġ= ĠMutable Int Vector ( 1 , Ġ 3 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 1 , Ġ- 7 , Ġ 5 ), Ġvelocity Ġ= ĠMutable Int Vector (- 3 , Ġ 1 , Ġ- 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 2 , Ġ 2 , Ġ 0 ), Ġvelocity Ġ= ĠMutable Int Vector (- 1 , Ġ- 3 , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . bodies ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 2 9 , Ġsystem . total Energy ) ĊĊĠĠĠĠĠĠĠ Ġsystem . simulate ( steps Ġ= Ġ 9 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 2 , Ġ 1 , Ġ- 3 ), Ġvelocity Ġ= ĠMutable Int Vector (- 3 , Ġ- 2 , Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 1 , Ġ- 8 , Ġ 0 ), Ġvelocity Ġ= ĠMutable Int Vector (- 1 , Ġ 1 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 3 , Ġ- 6 , Ġ 1 ), Ġvelocity Ġ= ĠMutable Int Vector ( 3 , Ġ 2 , Ġ- 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( position Ġ= ĠMutable Int Vector ( 2 , Ġ 0 , Ġ 4 ), Ġvelocity Ġ= ĠMutable Int Vector ( 1 , Ġ- 1 , Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . bodies ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 7 9 , Ġsystem . total Energy ) ĊĊĠĠĠĠĠĠĠ Ġsystem . reset () ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector (- 1 , Ġ 0 , Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector ( 2 , Ġ- 1 0 , Ġ- 7 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector ( 4 , Ġ- 8 , Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody ( Mutable Int Vector ( 3 , Ġ 5 , Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . bodies ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsystem . total Energy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Find Ax ial Period icity With Single Station ary Body (@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtemp Dir . create TempFile ( text Ġ= Ġ"< x =- 1 , Ġy = 0 , Ġz = 2 >") ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠN Body System ( file ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Mutable Int Vector ( 1 , Ġ 1 , Ġ 1 ), Ġsystem . find Ax ial Period icity ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Find Ax ial Period icity With Multiple B odies (@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtemp Dir . create TempFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x =- 1 , Ġy = 0 , Ġz = 2 > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x = 2 , Ġy =- 1 0 , Ġz =- 7 > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x = 4 , Ġy =- 8 , Ġz = 8 > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< x = 3 , Ġy = 5 , Ġz =- 1 > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠN Body System ( file ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Mutable Int Vector ( 1 8 , Ġ 2 8 , Ġ 4 4 ), Ġsystem . find Ax ial Period icity ()) ĊĠĠĠ Ġ} Ċ } Ċ