]> hydra-www.ietfng.org Git - dyna2/commitdiff
Rescue ctxFromBindings for aliased case
authorNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Tue, 18 Jun 2013 02:12:19 +0000 (22:12 -0400)
committerNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Tue, 18 Jun 2013 02:12:19 +0000 (22:12 -0400)
Use it in the test suite, just like for the unaliased machinery.
This is cherry-picked from 4e0fc1726ab4abf1326ea61ae5225f0bb5167707.

src/Dyna/Analysis/Mode/Execution/Context.hs
src/Dyna/Analysis/Mode/Selftest/Contexts.hs

index 863c7b05ec0785e23518c0faabc38557ce24af08..ffde52a075f1fbf8837c5506fe0813d7f7a71ce8 100644 (file)
@@ -34,13 +34,14 @@ module Dyna.Analysis.Mode.Execution.Context (
     -- ** Monad
     SIMCT(..), runSIMCT,
     -- *** And its context
-    SIMCtx(..), emptySIMCtx, allFreeSIMCtx,
+    SIMCtx(..), emptySIMCtx, allFreeSIMCtx, ctxFromBindings,
 
     -- ** Internal helper functions
     e2x, q2y, aliasN, aliasV, aliasX, aliasY, kUpUniq,
 )where
 
 import           Control.Applicative (Applicative)
+import           Control.Arrow (second)
 import           Control.Exception(assert)
 import           Control.Lens
 import           Control.Monad
@@ -202,6 +203,9 @@ allFreeSIMCtx :: [DVar] -> SIMCtx f
 allFreeSIMCtx fs = SIMCtx 0 IM.empty
                  $ M.fromList $ map (\x -> (x, VRStruct IFree)) fs
 
+ctxFromBindings :: [(DVar, NIX f)] -> SIMCtx f
+ctxFromBindings = SIMCtx 0 IM.empty . M.fromList . map (second VRName)
+
 runSIMCT :: SIMCT m f a -> SIMCtx f -> m (Either UnifFail (a, SIMCtx f))
 runSIMCT q x = runEitherT (runStateT (unSIMCT q) x)
 
index a1268aa7a6dce76a51185cf436026e46553be27f..2a3bf278cee654cb388f778ceb3a282e15968b33 100644 (file)
@@ -89,10 +89,9 @@ prop_alias_unifyUnaliasedNV = unifProp nWFN' alias_unifyUnaliasedNV nLeqGLBRL
  where
   alias_unifyUnaliasedNV n1 n2 =
     fmap fst $ runIdentity
-             $ flip CA.runSIMCT (CA.allFreeSIMCtx [v])
+             $ flip CA.runSIMCT (CA.ctxFromBindings [(v,n1)])
              $ flip runReaderT (UnifParams True False)
              $ do
-                _ <- FA.unifyUnaliasedNV n1 v
                 _ <- FA.unifyUnaliasedNV n2 v
                 FA.expandV v
    where v = "A"
@@ -102,11 +101,9 @@ prop_alias_unify = unifProp nWFN' alias_unify nLeqGLBRL
  where
   alias_unify n1 n2 =
     fmap fst $ runIdentity
-             $ flip CA.runSIMCT (CA.allFreeSIMCtx [vA,vB])
+             $ flip CA.runSIMCT (CA.ctxFromBindings [(vA,n1),(vB,n2)])
              $ flip runReaderT (UnifParams True False)
              $ do
-                _ <- FA.unifyUnaliasedNV n1 vA
-                _ <- FA.unifyUnaliasedNV n2 vB
                 _ <- FA.unifyVV vA vB
                 FA.expandV vA
    where vA = "A"
@@ -126,11 +123,8 @@ prop_alias_unifyVF = unifProp nWFN' alias_unifyVF gold
 
   alias_unifyVF n1 n2 =
     fmap fst $ runIdentity
-             $ flip CA.runSIMCT (CA.allFreeSIMCtx [vA,vB])
+             $ flip CA.runSIMCT (CA.ctxFromBindings [(vA,n1),(vB,n2)])
              $ do
-                _ <- flip runReaderT (UnifParams True False) $ do
-                  _ <- FA.unifyUnaliasedNV n1 vA
-                  FA.unifyUnaliasedNV n2 vB
                 _ <- FA.unifyVF True (const $ return True) vA G [vB]
                 FA.expandV vA
    where