From a3882aa98eb801278adc1f063e6724c035e1adfa Mon Sep 17 00:00:00 2001 From: Thomas Miedema <thomasmiedema@gmail.com> Date: Mon, 25 Apr 2016 18:13:36 +0200 Subject: [PATCH] Testsuite: AMPify tests/raytrace/Eval.hs --- tests/raytrace/Eval.hs | 23 +++++++++++++++++++---- tests/raytrace/test.T | 15 +++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/tests/raytrace/Eval.hs b/tests/raytrace/Eval.hs index 3ce24e4..bd9d419 100644 --- a/tests/raytrace/Eval.hs +++ b/tests/raytrace/Eval.hs @@ -5,6 +5,7 @@ module Eval where +import Control.Monad import Data.Array import Geometry @@ -22,9 +23,16 @@ class Monad m => MonadEval m where newtype Pure a = Pure a deriving Show +instance Functor Pure where + fmap = liftM + +instance Applicative Pure where + pure = Pure + (<*>) = ap + instance Monad Pure where Pure x >>= k = k x - return = Pure + return = pure fail s = error s instance MonadEval Pure where @@ -248,7 +256,7 @@ doPrimOp primOp op args types = getPrimOpType primOp --- Render is somewhat funny, becauase it can only get called at top level. +-- Render is somewhat funny, because it can only get called at top level. -- All other operations are purely functional. doAllOp :: PrimOp -> GMLOp -> Stack -> IO Stack @@ -286,11 +294,18 @@ newtype Abs a = Abs { runAbs :: Int -> AbsState a } data AbsState a = AbsState a !Int | AbsFail String +instance Functor Abs where + fmap = liftM + +instance Applicative Abs where + pure x = Abs (\ n -> AbsState x n) + (<*>) = ap + instance Monad Abs where (Abs fn) >>= k = Abs (\ s -> case fn s of AbsState r s' -> runAbs (k r) s' AbsFail m -> AbsFail m) - return x = Abs (\ n -> AbsState x n) + return = pure fail s = Abs (\ n -> AbsFail s) instance MonadEval Abs where @@ -325,7 +340,7 @@ mainEval prog = do { stk <- eval (State emptyEnv [] prog) } -} -done = "Items still on stack at (successfull) termination of program" +done = "Items still on stack at (successful) termination of program" ------------------------------------------------------------------------------ -- testing diff --git a/tests/raytrace/test.T b/tests/raytrace/test.T index 882fce2..a65423c 100644 --- a/tests/raytrace/test.T +++ b/tests/raytrace/test.T @@ -2,8 +2,15 @@ setTestOpts([omit_ways(['ghci']), when(fast(), skip)]) hpc_prefix = "perl ../hpcrun.pl --clear --exeext={exeext} --hpc={hpc}" -test('hpc_raytrace', \ - [ when(fast(), skip), cmd_prefix(hpc_prefix), reqlib('parsec') ], \ - multimod_compile_and_run, \ - ['Main','-fhpc -package parsec']) +# TODO. It is unclear what the purpose of this test is. It produces lots of +# output, but the expected output file is missing. I (thomie) added +# the ignore_output setup function, just to make the test pass for the +# moment. +# Note that the subdirectory tixs also has a test.T file, and those tests +# depend on some of the files in this directory. +# Also note that testsuite/tests/programs/galois_raytrace has a similar (but +# not the same) copy of this program. +test('hpc_raytrace', + [cmd_prefix(hpc_prefix), reqlib('parsec'), ignore_output], + multimod_compile_and_run, ['Main','-fhpc -package parsec']) -- GitLab