Giter Club home page Giter Club logo

minxmod's Introduction

Lightweight verification of multithreaded programs.

See Step.hs - it is quite obvious.

See Main.hs for several more examples - Peterson lock, deadlock etc.

We can also record traces in addition to states. It is not hard to add wait/notify (aka wait/pulseall), atomics, exceptions, thread interrupts.

Example:

module Main where

import Step

incrementer v = compile [
  Label "loop" $ Get v,
  Arith $ \(IntValue a:s) -> [(IntValue (a+1):s)], 
  Set v, 
  Jmp "loop"
  ]

i = initState [("a", IntValue 1), ("b", IntValue 1)] [] (compile [
  Spawn "a" (incrementer "a"),
  Spawn "b" (incrementer "b")
  ])


*Main Data.List Control.Monad> mapM_ print $ nub $ map fst $ runStep (replicateM 15 stepState) i
(fromList [("a",IntValue 4),("b",IntValue 1)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","1"),(Pid 2,"b","0")])
(fromList [("a",IntValue 4),("b",IntValue 1)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","0"),(Pid 2,"b","1")])
(fromList [("a",IntValue 4),("b",IntValue 1)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","3"),(Pid 2,"b","2")])
(fromList [("a",IntValue 3),("b",IntValue 2)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","2"),(Pid 2,"b","3")])
(fromList [("a",IntValue 3),("b",IntValue 2)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","1"),(Pid 2,"b","0")])
(fromList [("a",IntValue 3),("b",IntValue 2)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","0"),(Pid 2,"b","1")])
(fromList [("a",IntValue 3),("b",IntValue 2)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","3"),(Pid 2,"b","2")])
(fromList [("a",IntValue 2),("b",IntValue 3)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","2"),(Pid 2,"b","3")])
(fromList [("a",IntValue 2),("b",IntValue 3)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","1"),(Pid 2,"b","0")])
(fromList [("a",IntValue 2),("b",IntValue 3)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","0"),(Pid 2,"b","1")])
(fromList [("a",IntValue 2),("b",IntValue 3)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","3"),(Pid 2,"b","2")])
(fromList [("a",IntValue 1),("b",IntValue 4)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","2"),(Pid 2,"b","3")])
(fromList [("a",IntValue 1),("b",IntValue 4)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","1"),(Pid 2,"b","0")])
(fromList [("a",IntValue 1),("b",IntValue 4)],fromList [],[(Pid 0,"entry","<finished>"),(Pid 1,"a","0"),(Pid 2,"b","1")])
(fromList [("a",IntValue 4),("b",IntValue 1)],fromList [],[(Pid 0,"entry","1"),(Pid 1,"b","2")]

minxmod's People

Contributors

jkff avatar drrckln avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.