Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s
hk-collect-module-body previously ran a fixed import-loop at the start and then a separate decl-loop; merged into a single hk-body-step dispatcher that routes `import` to the imports list and everything else to hk-parse-decl. Both call sites (initial step + post-semicolon loop) use the dispatcher. The eval side reads imports as a list (not by AST position) so mid-stream imports feed into hk-bind-decls! unchanged. tests/parse-extras.sx 12 → 17: very-top, mid-stream, post-main, two-imports-different-positions, unqualified-mid-file. Regression sweep clean: eval 66/0, exceptions 14/0, typecheck 15/0, records 14/0, ioref 13/0, map 26/0, set 17/0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
103 lines
2.3 KiB
Plaintext
103 lines
2.3 KiB
Plaintext
;; Phase 17 — parser polish unit tests.
|
|
|
|
(hk-test
|
|
"type-ann: literal int annotated"
|
|
(hk-deep-force (hk-run "main = (42 :: Int)"))
|
|
42)
|
|
|
|
(hk-test
|
|
"type-ann: arithmetic annotated"
|
|
(hk-deep-force (hk-run "main = (1 + 2 :: Int)"))
|
|
3)
|
|
|
|
(hk-test
|
|
"type-ann: function arg annotated"
|
|
(hk-deep-force
|
|
(hk-run "f x = x + 1\nmain = f (1 :: Int)"))
|
|
2)
|
|
|
|
(hk-test
|
|
"type-ann: string annotated"
|
|
(hk-deep-force (hk-run "main = (\"hi\" :: String)"))
|
|
"hi")
|
|
|
|
(hk-test
|
|
"type-ann: bool annotated"
|
|
(hk-deep-force (hk-run "main = (True :: Bool)"))
|
|
(list "True"))
|
|
|
|
(hk-test
|
|
"type-ann: tuple annotated"
|
|
(hk-deep-force (hk-run "main = ((1, 2) :: (Int, Int))"))
|
|
(list "Tuple" 1 2))
|
|
|
|
(hk-test
|
|
"type-ann: nested annotation in arithmetic"
|
|
(hk-deep-force (hk-run "main = (1 :: Int) + (2 :: Int)"))
|
|
3)
|
|
|
|
(hk-test
|
|
"type-ann: function-typed annotation passes through eval"
|
|
(hk-deep-force
|
|
(hk-run "main = let f = ((\\x -> x + 1) :: Int -> Int) in f 5"))
|
|
6)
|
|
|
|
(hk-test
|
|
"no regression: plain parens still work"
|
|
(hk-deep-force (hk-run "main = (5)"))
|
|
5)
|
|
|
|
(hk-test
|
|
"no regression: 3-tuple still works"
|
|
(hk-deep-force (hk-run "main = (1, 2, 3)"))
|
|
(list "Tuple" 1 2 3))
|
|
|
|
(hk-test
|
|
"no regression: section-left still works"
|
|
(hk-deep-force (hk-run "main = (3 +) 4"))
|
|
7)
|
|
|
|
(hk-test
|
|
"no regression: section-right still works"
|
|
(hk-deep-force (hk-run "main = (+ 3) 4"))
|
|
7)
|
|
|
|
(hk-test
|
|
"import: still works as the very first decl"
|
|
(hk-deep-force
|
|
(hk-run "import qualified Data.IORef as I
|
|
main = do { r <- I.newIORef 7; I.readIORef r }"))
|
|
(list "IO" 7))
|
|
|
|
(hk-test
|
|
"import: between decls — after main"
|
|
(hk-deep-force
|
|
(hk-run "main = do { r <- I.newIORef 11; I.readIORef r }
|
|
import qualified Data.IORef as I"))
|
|
(list "IO" 11))
|
|
|
|
(hk-test
|
|
"import: between two decls — uses helper after import"
|
|
(hk-deep-force
|
|
(hk-run "f x = x + 100
|
|
import qualified Data.IORef as I
|
|
main = do { r <- I.newIORef 5; I.modifyIORef r f; I.readIORef r }"))
|
|
(list "IO" 105))
|
|
|
|
(hk-test
|
|
"import: two imports in different positions"
|
|
(hk-deep-force
|
|
(hk-run "import qualified Data.IORef as I
|
|
helper x = x * 2
|
|
import qualified Data.Map as M
|
|
main = do { r <- I.newIORef (helper 21); I.readIORef r }"))
|
|
(list "IO" 42))
|
|
|
|
(hk-test
|
|
"import: unqualified, mid-file"
|
|
(hk-deep-force
|
|
(hk-run "go x = x
|
|
import Data.IORef
|
|
main = go 9"))
|
|
9)
|