module test import StdEnv import Data.Either import Data.Func from Data.Map import :: Map(..) import qualified Data.Map import Control.Monad import Control.Monad.State import Control.Monad.Fail import ASDS import ASDS.Source import ASDS.Lens import ASDS.Select import ASDS.Parallel instance MonadFail (Either String) where fail s = Left s readwrite :: r w (sds m () r w) -> m () | MonadFail m & read sds & write sds & TC r & TC w & == r readwrite r w sds = equal r (setShare w sds >>| getShare sds) equal :: a (m a) -> m () | MonadFail m & == a equal expected mon = mon >>= \v->if (v == expected) (pure ()) (fail "Not equal") Start :: Either String ((), Map String Dynamic) Start = runStateT (sequence_ $ map test tests) 'Data.Map'.newMap where test t = put 'Data.Map'.newMap >>| t tests = flatten [ [readwrite i i sh \\ i<-[-1, 0, -100, 100]] , [setShare [0..10] sh >>| equal i (getShare (focus ((), i) (indexedStore sh)))\\i<-[0..10]] , [setShare [0..10] sh >>| setShare 42 (focus ((), i) (indexedStore sh)) >>| equal 42 (getShare (focus ((), i) (indexedStore sh)))\\i<-[0..10]] , [setShare [(i, i)\\i<-[0..10]] sh >>| equal i (getShare (focus ((), i) (assocStore sh)))\\i<-[0..10]] , [setShare ('Data.Map'.fromList [(i, i)\\i<-[0..10]]) sh >>| equal i (getShare (focus ((), i) (keyedStore sh)))\\i<-[0..10]] , [setShare (42, 'a') $ focus "foo" astore >+< focus "bar" astore] ] sh :: Lens (Lens (Lens (Lens (RWPair ReadSource WriteSource)))) (StateT (Map String Dynamic) m) () a a | MonadFail m & TC a sh = focus "foo" astore // t = setShare (42, "blurp") (focus "foo" astore >+< focus "bar" astore) // t = write 42 (astore "blurp") // >>| read (astore "blurp") // t = setShare 42 (focus "blurp" astore) // >>| getShare (focus "blurp" astore) //Start world = evalIO t world //where // t = getShare (focus "auds.icl" file) astore :: Lens (Lens (Lens (RWPair ReadSource WriteSource))) (StateT (Map String Dynamic) m) String a a | MonadFail m & TC a astore = fromDynStore dstore dstore :: Lens (Lens (RWPair ReadSource WriteSource)) (StateT (Map String Dynamic) m) String Dynamic Dynamic | MonadFail m dstore = translate (\i->((), i)) $ keyedStore store store :: Source (StateT (Map String Dynamic) m) () (Map String Dynamic) (Map String Dynamic) | Monad m store = source (\_->getState) \_->put