@@ -27,6 +27,8 @@ tests = testGroup "Regression tests for FRP.Yampa.Integration"
2727 , testProperty " imIntegral (0, qc)" testImIntegral0
2828 , testProperty " imIntegral (1, qc)" testImIntegral1
2929 , testProperty " imIntegral (2, qc)" testImIntegral2
30+ , testProperty " trapezoidIntegral (0, qc)" testTrapezoidIntegral0
31+ , testProperty " trapezoidIntegral (1, qc)" testTrapezoidIntegral1
3032 , testProperty " impulseIntegral (0, fixed)" (property $ utils_t7 ~= utils_t7r)
3133 , testProperty " count (0, fixed)" (property $ utils_t4 ~= utils_t4r)
3234 , testProperty " count (1, fixed)" (property $ utils_t5 ~= utils_t5r)
@@ -149,6 +151,40 @@ testImIntegral2 =
149151
150152 close (x,y) = abs (x- y) < 0.05
151153
154+ testTrapezoidIntegral0 :: Property
155+ testTrapezoidIntegral0 =
156+ forAll myStream $ evalT $
157+ Next $ Always $ prop ((sf &&& sfByHand), const close)
158+
159+ where
160+ myStream :: Gen (SignalSampleStream Double )
161+ myStream = uniDistStream
162+
163+ sf :: SF Double Double
164+ sf = trapezoidIntegral >>> derivative
165+
166+ sfByHand :: SF Double Double
167+ sfByHand = (identity &&& iPre 0 ) >>^ (\ (x, y) -> (x + y) / 2 )
168+
169+ close (x,y) = abs (x- y) < 0.05
170+
171+ testTrapezoidIntegral1 :: Property
172+ testTrapezoidIntegral1 =
173+ forAll myStream $ evalT $
174+ Next $ Always $ prop ((sf &&& sfByHand), const close)
175+
176+ where
177+ myStream :: Gen (SignalSampleStream Double )
178+ myStream = uniDistStream
179+
180+ sf :: SF Double Double
181+ sf = arr (* 2 ) >>> trapezoidIntegral
182+
183+ sfByHand :: SF Double Double
184+ sfByHand = trapezoidIntegral >>> arr (* 2 )
185+
186+ close (x,y) = abs (x- y) < 0.05
187+
152188utils_t7 :: [Double ]
153189utils_t7 = take 50 $ embed impulseIntegral
154190 (deltaEncode 0.1 (zip (repeat 1.0 ) evSeq))
0 commit comments