diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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.
 
diff --git a/src/Test/Tasty/Sugar.hs b/src/Test/Tasty/Sugar.hs
--- a/src/Test/Tasty/Sugar.hs
+++ b/src/Test/Tasty/Sugar.hs
@@ -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
diff --git a/src/internal/Test/Tasty/Sugar/Candidates.hs b/src/internal/Test/Tasty/Sugar/Candidates.hs
--- a/src/internal/Test/Tasty/Sugar/Candidates.hs
+++ b/src/internal/Test/Tasty/Sugar/Candidates.hs
@@ -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
diff --git a/tasty-sugar.cabal b/tasty-sugar.cabal
--- a/tasty-sugar.cabal
+++ b/tasty-sugar.cabal
@@ -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:
   .
diff --git a/test/TestParamsAssoc.hs b/test/TestParamsAssoc.hs
--- a/test/TestParamsAssoc.hs
+++ b/test/TestParamsAssoc.hs
@@ -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")
+          ]
+
      ]
