packages feed

Yampa-0.9.2: tests/AFRPTestsDelay.hs

{- $Id: AFRPTestsDelay.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
******************************************************************************
*                                  A F R P                                   *
*                                                                            *
*       Module:         AFRPTestsDelay					     *
*       Purpose:        Test cases for delays				     *
*	Authors:	Antony Courtney and Henrik Nilsson		     *
*                                                                            *
*             Copyright (c) Yale University, 2003                            *
*                                                                            *
******************************************************************************
-}

module AFRPTestsDelay (delay_tr, delay_trs) where

import FRP.Yampa

import AFRPTestsCommon

------------------------------------------------------------------------------
-- Test cases for delays
------------------------------------------------------------------------------

delay_t0 = testSF1 (delay 0.0 undefined)
delay_t0r =
    [0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,
     15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0]

delay_t1 = testSF1 (delay 0.0001 17)
delay_t1r =
    [17.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,
     15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0]

delay_t2 = testSF2 (delay 0.0001 17)
delay_t2r =
    [17.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,2.0,2.0,2.0,2.0,2.0,
     3.0,3.0,3.0,3.0,3.0,4.0,4.0,4.0,4.0]

delay_t3 = testSF1 (time 
                    >>> arr (\t -> sin (0.5 * t * pi + pi))
                    >>> loop (arr (\(x1,x2) -> let x' = max x1 x2 in (x',x')) 
                              >>> second (delay 0.0001 0.0)))
delay_t3r = 
    take 25
         (let xs = [ sin (0.5 * t * pi + pi) | t <- [0.0, 0.25 ..] ]
          in tail (scanl max 0 xs))

dts_t4 = take 15 (repeat 0.1)
         ++ [0.5, 0.5]
         ++ take 15 (repeat 0.1)
         ++ [2.0]
         ++ take 20 (repeat 0.1)

input_t4 = (0, [ (dt, Just i) | (dt, i) <- zip dts_t4 [1..] ])

delay_t4, delay_t4r :: [Int]
delay_t4 = take 100 (embed (delay 1.05 (-1)) input_t4)
delay_t4r =
    [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	-- 0.0 s -- 0.9 s
      -1,  0,  1,  2,  3,  4,			-- 1.0 s -- 1.5 s
       9,                 14, 15, 15, 15, 15,	-- 2.0 s -- 2.9 s
      15, 16, 16, 16, 16, 16, 17, 18, 19, 20,	-- 3.0 s -- 3.9 s
      21,					-- 4.0 s
      32, 32, 32, 32, 32, 32, 32, 32, 32, 32,	-- 6.0 s -- 6.9 s
      32, 33, 34, 35, 36, 37, 38, 39, 40, 41,	-- 7.0 s -- 7.9 s
      42					-- 8.0 s
    ]


delay_t5 = take 100 (drop 6 (embed sf (deltaEncode 0.1 (repeat ()))))
    where
        sf = time >>> arr (\t -> sin (2*pi*t)) >>> delay 0.55 (-1.0)

delay_t5r = take 100 (drop 6 (embed sf (deltaEncode 0.1 (repeat ()))))
    where
        sf = time >>> arr (\t -> sin (2*pi*(t-0.6)))


delay_trs =
    [ delay_t0 ~= delay_t0r,
      delay_t1 ~= delay_t1r,
      delay_t2 ~= delay_t2r,
      delay_t3 ~= delay_t3r,
      delay_t4 == delay_t4r,
      delay_t5 ~= delay_t5r
    ]

delay_tr = and delay_trs