dorinelfilip / statemachinetestingwithquickcheck Goto Github PK
View Code? Open in Web Editor NEW[CDL] QuickCheck Plug-In for State Machine Testing
[CDL] QuickCheck Plug-In for State Machine Testing
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
import Control.Applicative
import Control.Monad
import Network.HTTP.Conduit ( simpleHttp )
import qualified Data.ByteString.Lazy as L
import Database.MongoDB
( Select(select),
close,
master,
insertMany,
delete,
access,
host,
connect,
(=:) )
import Control.Monad.Trans (liftIO)
--import Control.Monad
import Data.Aeson
import Data.Text hiding (map)
import Data.Maybe
data RowListElement = RowListElement { id :: Value, abc :: Int } deriving Show
data RootJSONElement = RootJSONElement { offset :: Value, rows :: [RowListElement], total_rows :: Value, query :: Value, milis :: Value } deriving Show
instance FromJSON RowListElement where
parseJSON (Object v) =
RowListElement <$> v .: "_id" <*> v .: "abc"
parseJSON _ = mzero
instance FromJSON RootJSONElement where
parseJSON (Object v) =
RootJSONElement <$> v .: "offset" <*> v .: "rows" <*> v .: "total_rows" <*> v .: "query" <*> v .: "millis"
parseJSON _ = mzero
getIdsFromJSONString :: L.ByteString -> [Int]
getIdsFromJSONString s = result where
decodedInput = decode s :: Maybe RootJSONElement
xRowsList = rows $ fromJust decodedInput
result = Prelude.map abc xRowsList
main :: IO ()
main = do
apiBazaDate
jsonString <- simpleHttp "http://127.0.0.1:28017/baseball/team/"
let y = getIdsFromJSONString jsonString
print y
return ()
apiBazaDate = do
pipe <- connect (host "127.0.0.1")
e <- access pipe master "baseball" doAPIBazadade
close pipe
print e
doAPIBazadade = do
clearTeams
insertTeams
clearTeams = delete (select [] "team")
myInsertAbc list = insertMany $ map (\x -> ["abc" =: x]) list
insertTeams = insertMany "team" [
["abc" =: 123],
["abc" =: 456],
["abc" =: 789] ]
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Control.Monad
import Data.Aeson
import Data.Text
import Data.List
import Data.List.Split
import Test.QuickCheck
import Debug.Trace
nextStep :: (Eq a, Num a) => [a] -> [a]
nextStep input =
let
len = length input
list2 = filter (/= 0) input
list3 = group list2
list4 = map (chunksOf 2) list3
list5 = concat list4
list6 = map sum list5
in
take len $ list6 ++ (replicate len 0)
proprietate :: (Eq a, Num a) => [a] -> Bool
proprietate myList =
let
rarelen = length . (filter (==0))
listamea = traceShow myList myList
in
rarelen myList <= (rarelen $ nextStep myList)
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
import Test.QuickCheck ( Arbitrary
, Args
, Gen
, Property
, arbitrary
, choose
, frequency
, maxSuccess
, quickCheckWith
, shrink
, stdArgs
, vectorOf
)
import Test.QuickCheck.Monadic ( assert
, monadicIO
, run
)
import qualified Data.Set as Set
import Control.Applicative
import Control.Monad
import Network.HTTP.Conduit ( simpleHttp )
import qualified Data.ByteString.Lazy as L
import Database.MongoDB
( Select(select),
close,
master,
insertMany,
delete,
access,
host,
connect,
(=:) )
import Control.Monad.Trans (liftIO)
import Data.Aeson
import Data.Text hiding (map)
import Data.Maybe
data RowListElement = RowListElement { id :: Value, abc :: Int } deriving Show
data RootJSONElement = RootJSONElement { offset :: Value, rows :: [RowListElement], total_rows :: Value, query :: Value, milis :: Value } deriving Show
instance FromJSON RowListElement where
parseJSON (Object v) =
RowListElement <$> v .: "_id" <*> v .: "abc"
parseJSON _ = mzero
instance FromJSON RootJSONElement where
parseJSON (Object v) =
RootJSONElement <$> v .: "offset" <*> v .: "rows" <*> v .: "total_rows" <*> v .: "query" <*> v .: "millis"
parseJSON _ = mzero
getIdsFromJSONString :: L.ByteString -> [Int]
getIdsFromJSONString s = result where
decodedInput = decode s :: Maybe RootJSONElement
xRowsList = rows $ fromJust decodedInput
result = Prelude.map abc xRowsList
addInDatabase list = do
pipe <- connect (host "127.0.0.1")
e <- access pipe master "qctest" $ addQuery list
close pipe
print e
addQuery list = do
--clearTeams
insertIds list
clearIds = delete (select [] "randids")
myInsertAbc list = insertMany "randids" $ map (\x -> ["abc" =: x]) list
insertIds list = myInsertAbc list
egalitate x y = x == y
--prorietate :: [Int] -> Property
checkProp list = do
dbhandler <- addInDatabase list
let inputSet = Set.fromList list
restingJSON <- simpleHttp "http://127.0.0.1:28017/qctest/randids/"
let restList = getIdsFromJSONString restingJSON
let restingSet = Set.fromList restList
return $ restingSet == inputSet
--checkProp2 :: [Int] -> Property
--checkProp2 list = monadicIO $ do
-- passed <- run $ do
-- let x = checkProp list
-- assert passed
customArgs :: Args
customArgs = ( stdArgs { maxSuccess = 1000000 } )
--main :: IO ()
--main = quickCheckWith customArgs checkProp
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
import Control.Applicative
import Control.Monad
import Network.HTTP.Conduit ( simpleHttp )
import qualified Data.ByteString.Lazy as L
import Database.MongoDB
( Select(select),
close,
master,
insertMany,
delete,
access,
host,
connect,
(=:) )
import Control.Monad.Trans (liftIO)
--import Control.Monad
import Data.Aeson
import Data.Text
import Data.Maybe
data RowListElement = RowListElement { id :: Value, abc :: Int } deriving Show
data RootJSONElement = RootJSONElement { offset :: Value, rows :: [RowListElement], total_rows :: Value, query :: Value, milis :: Value } deriving Show
instance FromJSON RowListElement where
parseJSON (Object v) =
RowListElement <$> v .: "_id" <*> v .: "abc"
parseJSON _ = mzero
instance FromJSON RootJSONElement where
parseJSON (Object v) =
RootJSONElement <$> v .: "offset" <*> v .: "rows" <*> v .: "total_rows" <*> v .: "query" <*> v .: "millis"
parseJSON _ = mzero
getIdsFromJSONString :: L.ByteString -> [Int]
getIdsFromJSONString s = result where
decodedInput = decode s :: Maybe RootJSONElement
xRowsList = rows $ fromJust decodedInput
result = Prelude.map abc xRowsList
main :: IO ()
main = do
apiBazaDate
jsonString <- simpleHttp "http://127.0.0.1:28017/baseball/team/"
let y = getIdsFromJSONString jsonString
print y
return ()
apiBazaDate = do
pipe <- connect (host "127.0.0.1")
e <- access pipe master "baseball" doAPIBazadade
close pipe
print e
doAPIBazadade = do
clearTeams
insertTeams
clearTeams = delete (select [] "team")
insertTeams = insertMany "team" [
["abc" =: "123"],
["abc" =: "456"],
["abc" =: "789"] ]
import Test.QuickCheck ( Arbitrary
, Args
, Gen
, Property
, arbitrary
, choose
, frequency
, maxSuccess
, quickCheckWith
, shrink
, stdArgs
, vectorOf
)
import Control.Applicative ( (<$>) )
import Network.HTTP.Conduit ( httpLbs
, parseUrl
, responseBody
, simpleHttp
, urlEncodedBody
, withManager
)
import Data.List
import Data.List.Split
data EvenInt =
ZERO | TWO | FOUR | EIGHT
deriving (Eq, Show)
newtype EvenIntList =
MkEvenIntList [EvenInt]
deriving (Eq, Show)
instance Arbitrary EvenInt where
arbitrary = arbitrary :: Gen EvenInt
instance Arbitrary EvenIntList where
arbitrary = do
len <- choose(30, 50)
MkEvenIntList <$> ( vectorOf len $ (arbitrary :: Gen EvenInt) )
convertEvenIntToInt :: EvenInt -> Int
convertEvenIntToInt ZERO = 0
convertEvenIntToInt TWO = 2
convertEvenIntToInt FOUR = 4
convertEvenIntToInt EIGHT = 8
nextStep :: [Int] -> [Int]
nextStep inputList =
let
len = length inputList
aux_list =
map sum
$ concat
$ map (chunksOf 2)
$ group
$ filter (/= 0) inputList
in
take len $ aux_list ++ (replicate len 0)
proprietate :: (Eq a, Num a) => [a] -> Bool
proprietate myList =
let
rarelen = length . (filter (==0))
listamea = myList
in
rarelen myList <= (rarelen $ nextStep myList)
customArgs :: Args
customArgs = ( stdArgs { maxSuccess = 1000000 } )
main :: IO ()
main = quickCheckWith customArgs proprietate
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Control.Monad
import Data.Aeson
import Data.Text
data OID = MkOID { oid :: Text } deriving Show
data RowListElement = MkRowListElement { id :: Value, abc :: Int } deriving Show
instance FromJSON OID where
parseJSON (Object v) = MkOID <$> v .: "$oid"
parseJSON _ = mzero
instance ToJSON OID where
toJSON (MkOID oid) = object ["$oid" .= oid]
inputString = "{ \"$oid\": \"5548ed5171eab385baadf0a8\" }"
parseResult = decode inputString :: Maybe OID
[0,0,2,4,0,4,4,8,0,0,2,0,2,0,2,0,2,0,8,8,8,0,0,0,8,8,0,0,8,8]
> use baseball
switched to db baseball
> db.team.insert( {'abc': 123} )
> db.team.insert( {'abc': 456} )
> db.team.insert( {'abc': 789} )
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
import Control.Applicative
import Control.Monad
import Network.HTTP.Conduit ( simpleHttp )
import qualified Data.ByteString.Lazy as L
import Database.MongoDB
( Select(select),
close,
master,
insertMany,
delete,
access,
host,
connect,
(=:) )
import Control.Monad.Trans (liftIO)
--import Control.Monad
import Data.Aeson
import Data.Text
import Data.Maybe
data RowListElement = RowListElement { id :: Value, abc :: Int } deriving Show
data RootJSONElement = RootJSONElement { offset :: Value, rows :: [RowListElement], total_rows :: Value, query :: Value, milis :: Value } deriving Show
instance FromJSON RowListElement where
parseJSON (Object v) =
RowListElement <$> v .: "_id" <*> v .: "abc"
parseJSON _ = mzero
instance FromJSON RootJSONElement where
parseJSON (Object v) =
RootJSONElement <$> v .: "offset" <*> v .: "rows" <*> v .: "total_rows" <*> v .: "query" <*> v .: "millis"
parseJSON _ = mzero
getIdsFromJSONString :: L.ByteString -> [Int]
getIdsFromJSONString s = result where
decodedInput = decode s :: Maybe RootJSONElement
xRowsList = rows $ fromJust decodedInput
result = Prelude.map abc xRowsList
main :: IO ()
main = do
apiBazaDate
jsonString <- simpleHttp "http://127.0.0.1:28017/baseball/team/"
let y = getIdsFromJSONString jsonString
print y
return ()
apiBazaDate = do
pipe <- connect (host "127.0.0.1")
e <- access pipe master "baseball" doAPIBazadade
close pipe
print e
doAPIBazadade = do
clearTeams
insertTeams
clearTeams = delete (select [] "team")
insertTeams = insertMany "team" [
["abc" =: 123],
["abc" =: 456],
["abc" =: 789] ]
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
main = simpleHttp "http://www.haskell.org/" >>= L.putStr
import Test.QuickCheck ( Arbitrary
, Args
, Gen
, Property
, arbitrary
, choose
, frequency
, maxSuccess
, quickCheckWith
, shrink
, stdArgs
, vectorOf
)
import Control.Applicative ( (<$>) )
import Network.HTTP.Conduit ( httpLbs
, parseUrl
, responseBody
, simpleHttp
, urlEncodedBody
, withManager
)
import Data.List
import Data.List.Split
data EvenInt =
ZERO | TWO | FOUR | EIGHT
deriving (Eq, Show)
convertEvenIntToInt :: EvenInt -> Int
convertEvenIntToInt ZERO = 0
convertEvenIntToInt TWO = 2
convertEvenIntToInt FOUR = 4
convertEvenIntToInt EIGHT = 8
newtype EvenIntList =
MkEvenIntList [EvenInt]
deriving (Eq, Show)
instance Arbitrary EvenInt where
arbitrary = arbitrary :: Gen EvenInt
instance Arbitrary EvenIntList where
arbitrary = do
len <- choose(30, 50)
MkEvenIntList <$> ( vectorOf len $ (arbitrary :: Gen EvenInt) )
---take len $ (arbitrary :: Gen EvenInt)
extractFromEvenIntList :: EvenIntList -> [EvenInt]
extractFromEvenIntList (MkEvenIntList list) = list
convertEvenIntToIntList :: EvenIntList -> [Int]
convertEvenIntToIntList list = map convertEvenIntToInt $ extractFromEvenIntList $ list
nextStep :: [Int] -> [Int]
nextStep inputList =
let
len = length inputList
aux_list =
map sum
$ concat
$ map (chunksOf 2)
$ group
$ filter (/= 0) inputList
in
take len $ aux_list ++ (replicate len 0)
proprietate :: EvenIntList -> Bool
proprietate myList =
let
trueList = convertEvenIntToIntList myList
rarelen = length . (filter (==0))
listamea = trueList
rarelen myList <= (rarelen $ nextStep trueList)
customArgs :: Args
customArgs = ( stdArgs { maxSuccess = 1000000 } )
main :: IO ()
main = quickCheckWith customArgs proprietate
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.