TestExplode-0.1.0.0: doc/examples/Te52.hs
{-# LANGUAGE QuasiQuotes, ExtendedDefaultRules, OverloadedStrings #-}
module Te52 where -- exports everything, thus import only qualified!
import qualified Te_LA
import TestExplode.TestExplode
import TestExplode.DirGraphCombine
import VizViews
import FinalIO
import Text.InterpolatedString.Perl6 (qc)
import qualified Data.Text.Lazy as L
-- failure of the Speed Measurement, a short and a long time
data Te52Cnf =
Te52Cnf { durationOfFailure :: Int
,speed :: Int
,percentageOfFailure :: Int
,wisirNo :: Int
}
deriving (Show)
data Te52Locals =
Te52Locals { currTime :: Int, -- ms
currDistance :: Int -- cm
}
deriving (Show)
startLocals = Te52Locals 0 0
te52Testset = [ Te52Cnf { durationOfFailure = dura,
speed = v,
percentageOfFailure = perc,
wisirNo = wiNo
}
|
dura <- [0,100], --,200,999, 1001, 5000],
v <- [1, 10], --, 50,100],
perc <- [0,9,11], --9,11, 50, 100],
wiNo <- [1,2]
]
-- Parts of testcases (Casepart's)
-- Power Up
startRunCode :: Te52Cnf -> Te52Locals-> L.Text
startRunCode cfg locals = [qc|
switchOn();
testTheUnit(ok);
accelerateTo({speed cfg});
wait(10000)
|]
startRunVars :: Te52Cnf -> Te52Locals -> Te52Locals
startRunVars cnf locals = locals{currTime = (currTime locals) + 10000,
currDistance = (speed cnf) * 900 + (currDistance locals)
}
startRunCp = emptyCp
{ shortDesc = "Start up and run",
longDesc = "Switch the unit on\n Make functional test\n Accelerate to target speed",
codeFkt = startRunCode,
varFkt = startRunVars
}
-- Difference of the Speed measurement
makeDifferenceCode :: Te52Cnf -> Te52Locals -> L.Text
makeDifferenceCode cfg locals = [qc|
# states of the variables: {locals}
wisirSpeed({wisirNo cfg}, { fromIntegral (speed cfg)* (1-(fromIntegral (percentageOfFailure cfg)/100.0))} );
wait({durationOfFailure cfg});
|]
makeDifferenceVars cnf locals =
locals{currTime = round $ fromIntegral (currTime locals) * fromIntegral (percentageOfFailure cnf)/100.0}
makeDifferenceCp = emptyCp
{ shortDesc = "The 2 Speed measurements differ \n(or not)\nfor the given time",
longDesc = "The 2 Speed measurements differ \n(or not)\nfor the given time",
codeFkt = makeDifferenceCode,
varFkt = makeDifferenceVars
}
-- Check: Error!
checkNotOKCode :: Te52Cnf -> Te52Locals -> L.Text
checkNotOKCode cfg locals = [qc|
# states of the variables: {locals}
checkFailure(400, 208);
|]
checkNotOkCondition :: Te52Cnf -> Te52Locals -> Bool
checkNotOkCondition cfg locals = (percentageOfFailure cfg) > 10 &&
(durationOfFailure cfg) > 1000
checkNotOkCp = emptyCp
{ shortDesc = "Check: Failure",
longDesc = "Check: Failure",
codeFkt = checkNotOKCode,
condition = checkNotOkCondition,
condDesc = "> 10 %, > 1 s"
}
-- Check: No error
checkOKCode :: Te52Cnf -> Te52Locals -> L.Text
checkOKCode cfg locals = [qc|
# states of the variables: {locals}
checkFailure(None);
|]
checkOkCondition :: Te52Cnf -> Te52Locals -> Bool
checkOkCondition cfg locals = not (checkNotOkCondition cfg locals )
checkOkCp = emptyCp
{ shortDesc = "Check: No failure",
longDesc = "Check: No failure",
codeFkt = checkOKCode,
condition = checkOkCondition,
condDesc = "not (> 10 %, > 1 s)"
}
-- the special conversion functions
toTeLACnf :: Te52Cnf -> Te_LA.TeLACnf
toTeLACnf te52 = Te_LA.TeLACnf {Te_LA.allowedSpeed = (speed te52),
Te_LA.markName = "Mark_te52.1"
}
useVarsTeLA :: Te52Locals -> Te_LA.TeLAVars
useVarsTeLA te52 = Te_LA.TeLAVars 0
takeVarsTeLA :: Te52Locals -> Te_LA.TeLAVars -> Te52Locals
takeVarsTeLA fromMaster fromEmbedded =
fromMaster{ currDistance = (currDistance fromMaster)
+ (1000 - (Te_LA.restOfRest fromEmbedded))
}
-- the complete graph of the part-testcases
testgraph = split [ mkEle startRunCp,
mkGraph2Ele toTeLACnf useVarsTeLA takeVarsTeLA NotExpand Te_LA.testgraph
]
&-&
mkEle makeDifferenceCp
&-&
split [ mkEle checkNotOkCp,
mkEle checkOkCp
]
printSubGraph :: String -> (String, Testgraph (CasepartInternal cnf locals )) -> IO ()
printSubGraph path (name, testgraph) =
let vizGraph = mkVizGraph (dirGraph testgraph)
in
printTestgraphP recordView1 vizGraph path name
main :: IO ()
main = do
let testcases = generate "# " te52Testset startLocals (L.pack . show) testgraph
printTestcases testcases
let vizGraph = mkVizGraph testgraph
printTestgraph recordView1 vizGraph
-- Print the subgraphs
let subGraphList = getSubGraphs testgraph []
-- putStr $ show $ length subGraphList
-- mapM_ (putStr . show . fst) subGraphList
mapM_ (printSubGraph "subgraphs") subGraphList