// ĠCopyright Ġ 2 0 0 8 ĠGoogle ĠInc . Ċ // Ċ // ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ // Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ // ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ // Ċ // ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ // Ċ // ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ // Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ // ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ // ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ // Ġlimitations Ġunder Ġthe ĠLicense . Ċ package Ġcom . google . android . st ard roid . control Ċ Ċ import Ġcom . google . android . st ard roid . math . Lat Long Ċ import Ġcom . google . android . st ard roid . math . Math Utils . sqrt Ċ import Ġcom . google . android . st ard roid . math . Vector 3 Ċ import Ġcom . google . android . st ard roid . math . Vector 3 Subject Ċ import Ġjunit . framework . TestCase Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠTest Ġof Ġthe Ġ[ A str onom er Model Impl ] Ġclass . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJohn ĠT aylor Ċ Ġ*/ Ċ class ĠA str onom er Model Test Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġa str onom er : ĠA str onom er Model Ġ= ĠA str onom er Model Impl ( Zero Mag netic Decl ination Calculator ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġphone Ġis Ġflat , Ġlong Ġside Ġpointing ĠNorth Ġat Ġlat , long Ġ= Ġ 0 , Ġ 9 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Phone Sensor Values _ phone Flat At Lat 0 Long 9 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLat Long ( 0 f , Ġ 9 0 f ) ĊĠĠĠĠĠĠĠ Ġ// ĠPhone Ġflat Ġon Ġback , Ġtop Ġedge Ġtowards ĠNorth ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfollowing Ġare Ġin Ġthe Ġphone 's Ġcoordinate Ġsystem . ĊĠĠĠĠĠĠĠ Ġval Ġacceleration Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġmagnetic Field Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfollowing Ġare Ġin Ġthe Ġcele st ial Ġcoordinate Ġsystem . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Z en ith Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected N adir Ġ= ĠVector 3 ( 0 f , Ġ- 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected North Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected East Ġ= ĠVector 3 (- 1 f , Ġ 0 f , Ġ 0 f ) Ġ Ġ// ĠN Ġcross ĠUp ĊĠĠĠĠĠĠĠ Ġval Ġexpected South Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected West Ġ= ĠVector 3 ( 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcheck Model Orientation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , Ġacceleration , Ġmagnetic Field , Ġexpected Z en ith , Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected North , Ġexpected East , Ġexpected South , Ġexpected West , Ġexpected Point ing Ġ= Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Up Al ong Phone Ġ= Ġexpected North ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAs Ġprevious Ġtest , Ġbut Ġat Ġlat , Ġlong Ġ= Ġ( 4 5 , Ġ 0 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Phone Sensor Values _ phone Flat At Lat 4 5 Long 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLat Long ( 4 5 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġacceleration Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġmagnetic Field Ġ= ĠVector 3 ( 0 f , Ġ 1 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Z en ith Ġ= ĠVector 3 ( 1 Ġ/ ĠS Q RT 2 , Ġ 0 f , Ġ 1 Ġ/ ĠS Q RT 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected N adir Ġ= ĠVector 3 (- 1 Ġ/ ĠS Q RT 2 , Ġ 0 f , Ġ- 1 Ġ/ ĠS Q RT 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected North Ġ= ĠVector 3 (- 1 Ġ/ ĠS Q RT 2 , Ġ 0 f , Ġ 1 Ġ/ ĠS Q RT 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected East Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected South Ġ= ĠVector 3 ( 1 Ġ/ ĠS Q RT 2 , Ġ 0 f , Ġ- 1 Ġ/ ĠS Q RT 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected West Ġ= ĠVector 3 ( 0 f , Ġ- 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcheck Model Orientation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , Ġacceleration , Ġmagnetic Field , Ġexpected Z en ith , Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected North , Ġexpected East , Ġexpected South , Ġexpected West , Ġexpected Point ing Ġ= Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Up Al ong Phone Ġ= Ġexpected North ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAs Ġprevious Ġtest , Ġbut Ġat Ġlat , Ġlong Ġ= Ġ( 0 , Ġ 0 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Phone Sensor Values _ phone Flat On Equ ator At Mer id ian () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLat Long ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ// ĠPhone Ġflat Ġon Ġback , Ġtop Ġedge Ġtowards ĠNorth ĊĠĠĠĠĠĠĠ Ġval Ġacceleration Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġmagnetic Field Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Z en ith Ġ= ĠVector 3 ( 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected N adir Ġ= ĠVector 3 (- 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected North Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected East Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected South Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected West Ġ= ĠVector 3 ( 0 f , Ġ- 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcheck Model Orientation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , Ġacceleration , Ġmagnetic Field , Ġexpected Z en ith , Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected North , Ġexpected East , Ġexpected South , Ġexpected West , Ġexpected Point ing Ġ= Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Up Al ong Phone Ġ= Ġexpected North ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAs Ġprevious Ġtest , Ġbut Ġwith Ġthe Ġphone Ġvertical , Ġbut Ġin Ġlandscape Ġmode ĊĠĠĠĠ Ġ* Ġand Ġpointing Ġeast . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Phone Sensor Values _ phone Land scape Facing East On Equ ator At Mer id ian () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLat Long ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġacceleration Ġ= ĠVector 3 ( 1 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġmagnetic Field Ġ= ĠVector 3 (- 1 0 f , Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Z en ith Ġ= ĠVector 3 ( 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected N adir Ġ= ĠVector 3 (- 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected North Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected East Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected South Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected West Ġ= ĠVector 3 ( 0 f , Ġ- 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcheck Model Orientation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , Ġacceleration , Ġmagnetic Field , Ġexpected Z en ith , Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected North , Ġexpected East , Ġexpected South , Ġexpected West , Ġexpected Point ing Ġ= Ġexpected East , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Up Al ong Phone Ġ= Ġexpected North ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAs Ġprevious Ġtest , Ġbut Ġin Ġpor trait Ġmode Ġfacing Ġnorth . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Set Phone Sensor Values _ phone Stand ing Up Facing North On Equ ator At Mer id ian () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLat Long ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġacceleration Ġ= ĠVector 3 ( 0 f , Ġ 1 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġmagnetic Field Ġ= ĠVector 3 ( 0 f , Ġ 1 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Z en ith Ġ= ĠVector 3 ( 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected N adir Ġ= ĠVector 3 (- 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected North Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected East Ġ= ĠVector 3 ( 0 f , Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected South Ġ= ĠVector 3 ( 0 f , Ġ 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected West Ġ= ĠVector 3 ( 0 f , Ġ- 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcheck Model Orientation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , Ġacceleration , Ġmagnetic Field , Ġexpected Z en ith , Ġexpected N adir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected North , Ġexpected East , Ġexpected South , Ġexpected West , Ġexpected Point ing Ġ= Ġexpected North , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Up Al ong Phone Ġ= Ġexpected Z en ith ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Model Orientation ( ĊĠĠĠĠĠĠĠ Ġlocation : ĠLat Long , ĊĠĠĠĠĠĠĠ Ġacceleration : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġmagnetic Field : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected Z en ith : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected N adir : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected North : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected East : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected South : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected West : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected Point ing : ĠVector 3 , ĊĠĠĠĠĠĠĠ Ġexpected Up Al ong Phone : ĠVector 3 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġa str onom er . location Ġ= Ġlocation ĊĠĠĠĠĠĠĠ Ġval Ġfake Clock Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġdate Ġis Ġspecial Ġas ĠRA , ĠDEC Ġ= Ġ( 0 , Ġ 0 ) Ġis Ġdirectly Ġoverhead Ġat Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġequ ator Ġon Ġthe ĠGreen wich Ġmer id ian . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 2 : 0 7 ĠMarch Ġ 2 0 th Ġ 2 0 0 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠG regorian Calendar ( TimeZone . getTime Zone (" UTC ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar [ 2 0 0 9 , Ġ 2 , Ġ 2 0 , Ġ 1 2 , Ġ 7 ] Ġ= Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa str onom er . set Clock ( fake Clock ) ĊĠĠĠĠĠĠĠ Ġa str onom er . set Phone Sensor Values ( acceleration , Ġmagnetic Field ) ĊĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . zen ith ). is Within ( TO L ). of ( expected Z en ith ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . n adir ). is Within ( TO L ). of ( expected N adir ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . north ). is Within ( TO L ). of ( expected North ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . east ). is Within ( TO L ). of ( expected East ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . south ). is Within ( TO L ). of ( expected South ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . west ). is Within ( TO L ). of ( expected West ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . point ing . line Of S ight ). is Within ( TO L ). of ( expected Point ing ) ĊĠĠĠĠĠĠĠ ĠVector 3 Subject . assertThat ( astr onom er . point ing . per pend icular ). is Within ( TO L ). of ( expected Up Al ong Phone ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠS Q RT 2 Ġ= Ġsqrt ( 2 f ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠT OL Ġ= Ġ 1 e - 3 f ĊĠĠĠ Ġ} Ċ }