Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 51s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
108 lines
3.3 KiB
Plaintext
108 lines
3.3 KiB
Plaintext
;; deriving.sx — tests for deriving (Eq, Show) on ADTs.
|
|
|
|
;; ─── Show ────────────────────────────────────────────────────────────────────
|
|
|
|
(hk-test
|
|
"deriving Show: nullary constructor"
|
|
(hk-deep-force
|
|
(hk-run "data Color = Red | Green | Blue deriving (Show)\nmain = show Red"))
|
|
"Red")
|
|
|
|
(hk-test
|
|
"deriving Show: constructor with arg"
|
|
(hk-deep-force
|
|
(hk-run "data Wrapper = Wrap Int deriving (Show)\nmain = show (Wrap 42)"))
|
|
"Wrap 42")
|
|
|
|
(hk-test
|
|
"deriving Show: nested constructors"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Tree = Leaf | Node Int Tree Tree deriving (Show)\nmain = show (Node 1 Leaf Leaf)"))
|
|
"Node 1 Leaf Leaf")
|
|
|
|
(hk-test
|
|
"deriving Show: second constructor"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Color = Red | Green | Blue deriving (Show)\nmain = show Green"))
|
|
"Green")
|
|
|
|
;; ─── Eq ──────────────────────────────────────────────────────────────────────
|
|
|
|
(hk-test
|
|
"deriving Show: nested ADT wraps inner constructor in parens"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Tree = Leaf | Node Int Tree Tree deriving (Show)\nmain = show (Node 1 Leaf (Node 2 Leaf Leaf))"))
|
|
"Node 1 Leaf (Node 2 Leaf Leaf)")
|
|
|
|
(hk-test
|
|
"deriving Show: Maybe Maybe wraps inner Just"
|
|
(hk-deep-force (hk-run "main = show (Just (Just 3))"))
|
|
"Just (Just 3)")
|
|
|
|
(hk-test
|
|
"deriving Show: negative argument wrapped in parens"
|
|
(hk-deep-force (hk-run "main = show (Just (negate 3))"))
|
|
"Just (-3)")
|
|
|
|
(hk-test
|
|
"deriving Show: list element does not need parens"
|
|
(hk-deep-force
|
|
(hk-run "data Box = Box [Int] deriving (Show)\nmain = show (Box [1,2,3])"))
|
|
"Box [1,2,3]")
|
|
|
|
;; ─── combined Eq + Show ───────────────────────────────────────────────────────
|
|
|
|
(hk-test
|
|
"deriving Eq: same constructor"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Color = Red | Green | Blue deriving (Eq)\nmain = show (Red == Red)"))
|
|
"True")
|
|
|
|
(hk-test
|
|
"deriving Eq: different constructors"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Color = Red | Green | Blue deriving (Eq)\nmain = show (Red == Blue)"))
|
|
"False")
|
|
|
|
(hk-test
|
|
"deriving Eq: /= same"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Color = Red | Green | Blue deriving (Eq)\nmain = show (Red /= Red)"))
|
|
"False")
|
|
|
|
(hk-test
|
|
"deriving Eq: /= different"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Color = Red | Green | Blue deriving (Eq)\nmain = show (Red /= Blue)"))
|
|
"True")
|
|
|
|
(hk-test
|
|
"deriving Eq Show: combined"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Shape = Circle Int | Square Int deriving (Eq, Show)\nmain = show (Circle 5)"))
|
|
"Circle 5")
|
|
|
|
(hk-test
|
|
"deriving Eq Show: eq on constructor with arg"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Shape = Circle Int | Square Int deriving (Eq, Show)\nmain = show (Circle 3 == Circle 3)"))
|
|
"True")
|
|
|
|
(hk-test
|
|
"deriving Eq Show: different constructors with args"
|
|
(hk-deep-force
|
|
(hk-run
|
|
"data Shape = Circle Int | Square Int deriving (Eq, Show)\nmain = show (Circle 3 == Square 3)"))
|
|
"False")
|
|
|
|
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}
|