package Ġio . github . ox i def rp . semantics Ċ Ċ import Ġkotlin . math . PI Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ const Ġval Ġepsilon Ġ= Ġ 0 . 0 0 0 0 0 1 Ċ Ċ class ĠSignal Operators UnitTests Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Constant () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsignal Ġ= ĠSignal . constant ( 8 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġsignal . at ( Time ( t Ġ= Ġ- 1 0 . 0 )), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġsignal . at ( Time ( t Ġ= Ġ 0 . 0 )), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġsignal . at ( Time ( t Ġ= Ġ 6 . 2 )), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsignal Input Ġ= Ġobject Ġ: ĠSignal < Double >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġat ( t : ĠTime ): ĠDouble Ġ= Ġsin ( t . t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsignal Input . map Ġ{ Ġit Ġ* Ġ 2 . 0 Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ 0 . 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 1 . 4 1 4 2 1 3 5 6 2 3 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= ĠPI Ġ/ Ġ 4 . 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= ĠPI Ġ/ Ġ 2 . 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Apply () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Signal Ġ= Ġobject Ġ: ĠSignal <( Double ) Ġ-> ĠDouble >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġat ( t : ĠTime ) Ġ= Ġfun ( x : ĠDouble ) Ġ= Ġcos ( x ) Ġ* Ġt . t ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġargument Signal Ġ= Ġobject Ġ: ĠSignal < Double >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġat ( t : ĠTime ) Ġ= Ġt . t Ġ/ Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSignal . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Ġ= Ġfunction Signal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Ġ= Ġargument Signal , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ- 2 . 8 3 6 6 2 1 8 5 4 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ- 1 0 . 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ 0 . 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ- 6 . 1 9 4 6 3 7 9 3 1 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ 6 . 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sample () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinner Signal 1 Ġ= Ġobject Ġ: ĠSignal < Double >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġat ( t : ĠTime ) Ġ= Ġ- sin ( t . t ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Signal 2 Ġ= Ġobject Ġ: ĠSignal < Double >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġat ( t : ĠTime ) Ġ= Ġcos ( t . t ) Ġ+ Ġ 3 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġouter Signal Ġ= Ġobject Ġ: ĠSignal < Signal < Double >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġat ( t : ĠTime ) Ġ= Ġif Ġ( t . t . toInt () Ġ% Ġ 2 Ġ== Ġ 0 ) Ġinner Signal 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġinner Signal 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSignal . sample ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignal Ġ= Ġouter Signal , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 3 . 2 6 7 4 9 8 8 2 8 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ 1 . 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ- 0 . 5 1 5 5 0 1 3 7 1 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ 2 . 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ 3 . 6 8 4 5 4 6 6 6 6 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ġ= Ġresult . at ( Time ( t Ġ= Ġ 7 . 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabsolute Tolerance Ġ= Ġepsilon , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ