tasty-sugar 2.0.0.0 → 2.0.0.1
raw patch · 5 files changed
+71/−22 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +10/−1
- src/Test/Tasty/Sugar.hs +12/−3
- src/internal/Test/Tasty/Sugar/Candidates.hs +3/−2
- tasty-sugar.cabal +1/−1
- test/TestParamsAssoc.hs +45/−15
CHANGELOG.md view
@@ -1,6 +1,15 @@ # Revision history for tasty-sugar -## 2.0+## 2.0.0.1 -- 2022-11-10++ * Fixed arithmetic underflow exception. This only happened when an+ unconstrained parameter value was used and a subdirectory matched a+ constrained parameter value.++ * Fixed test group name for unconstrained parameters to use the actual parameter+ value (if available).++## 2.0 -- 2022-11-07 * Performance improvements. Now scales better when there are more parameters.
src/Test/Tasty/Sugar.hs view
@@ -99,7 +99,7 @@ import Data.Function import qualified Data.List as L import qualified Data.Map as Map-import Data.Maybe ( isJust, isNothing, fromJust )+import Data.Maybe ( isJust, isNothing, fromJust, fromMaybe ) import Data.Proxy import qualified Data.Text as T import Data.Typeable ( Typeable )@@ -350,8 +350,17 @@ mkParams sweet exp [] = concat <$> (mapM (uncurry $ mkLeaf sweet) $ zip [1..] exp) mkParams sweet exp ((name,vspec):ps) = case vspec of- Nothing -> do ts <- mkParams sweet exp ps- return [mkGroup name ts]+ Nothing ->+ let pVal = lookup name . expParamsMatch+ expSrt = L.sortBy (compare `on` pVal) exp+ expGrps = L.groupBy ((==) `on` pVal) expSrt+ f es =+ let gn = fromMaybe (name <> " not specified")+ $ (getParamVal =<<+ (lookup name $ expParamsMatch $ head es)+ )+ in mkGroup gn <$> mkParams sweet es ps+ in sequence $ f <$> expGrps Just vs -> let f v = mkGroup v <$> mkParams sweet (subExp v) ps subExp v = expMatching name v exp in sequence $ f <$> L.sort vs
src/internal/Test/Tasty/Sugar/Candidates.hs view
@@ -157,7 +157,7 @@ holes chkRange present = let rmvKnown _ [] = [] rmvKnown p@(ps,pe) ((s,e):rs) =- if abs(ps-s) <= 1+ if abs(fromEnum ps - fromEnum s) <= 1 then if pe > e then rmvKnown (toEnum e,pe) rs else if abs(pe-e) <= 1@@ -171,7 +171,8 @@ else (s, fromEnum ps) : rmvKnown (toEnum e, pe) rs else rmvKnown p rs r' = filter (\x -> fst x /= snd x) chkRange- in foldr rmvKnown (first toEnum <$> r') (DL.sort present)+ p' = filter (\(x,y) -> not $ and [ x == 0, y == 0 ]) present+ in foldr rmvKnown (first toEnum <$> r') (DL.sort p') -- | This converts a CandidatFile into a regular FilePath for access
tasty-sugar.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.0 name: tasty-sugar-version: 2.0.0.0+version: 2.0.0.1 synopsis: Tests defined by Search Using Golden Answer References description: .
test/TestParamsAssoc.hs view
@@ -13,7 +13,9 @@ sample :: CUBE -> [CandidateFile]-sample cube = fmap (makeCandidate cube testInpPath [])+sample cube = d1 <> d2+ where+ d1 = fmap (makeCandidate cube testInpPath []) $ filter (not . null) $ lines [r| recursive.rs@@ -49,7 +51,14 @@ epsilon.expct epsilon.clang.expct epsilon.y......expct+hole-here.exe+hole-here-gcc.expct |]+ d2 = fmap (makeCandidate cube testInpPath ["gcc"])+ $ filter (not . null)+ $ lines [r|+hole-here.c+|] testInpPath = "test/params/samples"@@ -93,7 +102,6 @@ mkEr p = mkE' [ ("rust-source", p "recursive.rs") ] Assumed Assumed p mkEc p f c = mkE' [ ("c-source", p "simple.c") ] Assumed Assumed p f (Explicit c) mkEo cs p f c ca = mkE' [] cs ca p f c NotSpecified- mkEq cs ca p f c = mkE' [] cs ca p f c p = (testInpPath </>) chkFld :: Eq a => Show a => Maybe Sweets -> String -> (Sweets -> a) -> a -> TT.TestTree@@ -101,7 +109,7 @@ chkExp s g n f c o = testCase ("Exp #" <> show n) $ (safeElem n . expected =<< s) @?= Just (g f c o)- in [ testCase "valid sample" $ 33 @=? length (sample sugarCube)+ in [ testCase "valid sample" $ 36 @=? length (sample sugarCube) , TT.testGroup "candidates" [@@ -142,11 +150,18 @@ , chkCandidate "epsilon.expct" [] , chkCandidate "epsilon.clang.expct" [("c-compiler", Explicit "clang")] , chkCandidate "epsilon.y......expct" [("a param", Explicit "y")]+ , chkCandidate "hole-here.exe" [("optimization", Explicit "here")]+ , chkCandidate "hole-here-gcc.expct" [("c-compiler", Explicit "gcc")+ ,("optimization", Explicit "here")]+ , checkCandidate sugarCube sample testInpPath ["gcc"] 0 "hole-here.c"+ [("c-compiler", Explicit "gcc")+ ,("optimization", Explicit "here")+ ] ] - , sugarTestEq "correct found count" sugarCube sample 11 length+ , sugarTestEq "correct found count" sugarCube sample 12 length - , let sweetNum = 5+ , let sweetNum = 6 sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet@@ -161,7 +176,7 @@ , chkE 0 "recursive.fast.expct" (Assumed "gcc") (Explicit "fast") ] - , let sweetNum = 8+ , let sweetNum = 9 sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet@@ -179,7 +194,7 @@ , chkE 2 "simple.expct" "clang" (Explicit "noopt") ] - , let sweetNum = 9+ , let sweetNum = 10 sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet@@ -197,7 +212,7 @@ , chkE 2 "simple.noopt-gcc.expct" "gcc" (Explicit "noopt") ] - , let sweetNum = 10+ , let sweetNum = 11 sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet@@ -217,7 +232,7 @@ -- This repeats a parameter value and also matches with a different -- value. The duplicate value should be ignored, but both values should -- result in different Expectations.- , let sweetNum = 7+ , let sweetNum = 8 sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet@@ -240,7 +255,7 @@ -- the optimization parameter has no value specified, so multiple values -- are found that could be tried, along with an expect file that doesn't -- supply a potential value for this parameter.- , let sweetNum = 6+ , let sweetNum = 7 sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet@@ -267,7 +282,7 @@ sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet- chkE n cs ca f c = chkExp sweet (mkEq cs ca p) n f c NotSpecified+ chkE n cs ca f c = chkExp sweet (mkE' [] cs ca p) n f c NotSpecified in TT.testGroup ("Sweet #" <> show sweetNum) [ chkF "rootMatchName" rootMatchName "alpha.exe"@@ -286,7 +301,7 @@ sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet- chkE n cs ca f c = chkExp sweet (mkEq cs ca p) n f c NotSpecified+ chkE n cs ca f c = chkExp sweet (mkE' [] cs ca p) n f c NotSpecified in TT.testGroup ("Sweet #" <> show sweetNum) [ chkF "rootMatchName" rootMatchName "beta.exe"@@ -304,7 +319,7 @@ sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet- chkE n cs ca f c = chkExp sweet (mkEq cs ca p) n f c NotSpecified+ chkE n cs ca f c = chkExp sweet (mkE' [] cs ca p) n f c NotSpecified in TT.testGroup ("Sweet #" <> show sweetNum) [ chkF "rootMatchName" rootMatchName "gamma.exe"@@ -321,7 +336,7 @@ sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet- chkE n cs ca f c = chkExp sweet (mkEq cs ca p) n f c NotSpecified+ chkE n cs ca f c = chkExp sweet (mkE' [] cs ca p) n f c NotSpecified in TT.testGroup ("Sweet #" <> show sweetNum) [ chkF "rootMatchName" rootMatchName "delta.exe"@@ -340,7 +355,7 @@ sweet = safeElem sweetNum sugar1 chkF = chkFld sweet chkP = chkFld sweet- chkE n cs ca f c = chkExp sweet (mkEq cs ca p) n f c NotSpecified+ chkE n cs ca f c = chkExp sweet (mkE' [] cs ca p) n f c NotSpecified in TT.testGroup ("Sweet #" <> show sweetNum) [ chkF "rootMatchName" rootMatchName "epsilon.exe"@@ -352,4 +367,19 @@ , chkE 1 Assumed Explicit "epsilon.y......expct" (Assumed "clang") , chkE 0 Assumed Explicit "epsilon.y......expct" (Assumed "gcc") ]++ , let sweetNum = 5+ sweet = safeElem sweetNum sugar1+ chkF = chkFld sweet+ chkP = chkFld sweet+ chkE = chkExp sweet (mkE' [("c-source", p "gcc/hole-here.c")] Assumed Assumed p)+ in TT.testGroup ("Sweet #" <> show sweetNum)+ [+ chkF "rootMatchName" rootMatchName "hole-here.exe"+ , chkF "rootBaseName" rootBaseName "hole"+ , chkF "rootFile" rootFile $ p "hole-here.exe"+ , chkP "cubeParams" cubeParams $ validParams sugarCube+ , chkE 0 "hole-here-gcc.expct" (Explicit "gcc") (Explicit "here")+ ]+ ]