aoc2025 test script

This commit is contained in:
2026-01-20 17:39:05 -08:00
parent b653a37d2c
commit b32f345f55
15 changed files with 193 additions and 0 deletions

6
.gitignore vendored
View File

@@ -3,6 +3,7 @@ build/
*~
*.swp
*.log
*.bak
*.agda
*.agdai
/*.js
@@ -12,3 +13,8 @@ mkday.py
tmp
min.js.gz
src/Revision.newt
.calva
.clj-kondo
.joyride
.lsp
.vscode

View File

@@ -36,6 +36,7 @@ test: newt.js
aoctest: newt.js
scripts/aoc
scripts/aoc25
# Misc

6
aoc2025/Day1.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day1/eg.txt
part1 3
part2 6
aoc2025/day1/input.txt
part1 1100
part2 6358

11
aoc2025/Day11.newt.golden Normal file
View File

@@ -0,0 +1,11 @@
aoc2025/day11/eg.txt
part1 5
svr missing {"tag":0}
part2 0
aoc2025/day11/eg2.txt
you missing {"tag":0}
part1 0
part2 2
aoc2025/day11/input.txt
part1 636
part2 509312913844956

View File

@@ -0,0 +1,6 @@
aoc2025/day12/eg.txt
[7, 7, 7, 7, 7, 7]
3 rows, 0 easy, 3 maybe, 0 impossible
aoc2025/day12/input.txt
[7, 5, 7, 6, 7, 7]
1000 rows, 479 easy, 0 maybe, 521 impossible

6
aoc2025/Day2.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day2/eg.txt
part1 1227775554
part2 4174379265
aoc2025/day2/input.txt
part1 18893502033
part2 26202168557

6
aoc2025/Day3.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day3/eg.txt
part1 357
part2 3121910778619
aoc2025/day3/input.txt
part1 17452
part2 173300819005913

6
aoc2025/Day4.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day4/eg.txt
part1 13
part2 43
aoc2025/day4/input.txt
part1 1569
part2 9280

6
aoc2025/Day5.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day5/eg.txt
part1 3
part2 14
aoc2025/day5/input.txt
part1 862
part2 357907198933892

6
aoc2025/Day6.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day6/eg.txt
part1 4277556
part2 3263827
aoc2025/day6/input.txt
part1 5346286649122
part2 10389131401929

10
aoc2025/Day7.newt.golden Normal file
View File

@@ -0,0 +1,10 @@
aoc2025/day7/eg.txt
rows 15
cols 14
part1 21
part2 40
aoc2025/day7/input.txt
rows 141
cols 140
part1 1587
part2 5748679033029

6
aoc2025/Day8.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day8/eg.txt
part1 40
part2 25272
aoc2025/day8/input.txt
part1 123234
part2 9259958565

6
aoc2025/Day9.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2025/day9/eg.txt
part1 6 50
part2 24
aoc2025/day9/input.txt
part1 1222 4777816465
part2 1410501884

75
aoc2025/Parser.newt Normal file
View File

@@ -0,0 +1,75 @@
module Parser
import Prelude
import Aoc
Parser : U U
Parser a = List Char Either String (a × List Char)
instance Monad Parser where
pure a = \ cs => Right (a, cs)
bind ma mab = \ cs => ma cs >>= uncurry mab
instance Alternative Parser where
pa <|> pb = \ cs => case pa cs of
Left msg => pb cs
res => res
instance Functor Parser where
map f pa = \ cs => case pa cs of
Left msg => Left msg
Right (a, cs) => Right (f a, cs)
instance Applicative Parser where
return a = pure a
pa <*> pb = pa >>= (\ f => map f pb)
fail : a. String -> Parser a
fail msg = \ cs => Left msg
-- TODO, case builder isn't expanding Parser Unit to count lambdas
eof : Parser Unit
eof = \case
Nil => Right (MkUnit, Nil)
_ => Left "expected eof"
satisfy : (Char Bool) Parser Char
satisfy pred = \case
Nil => Left "unexpected EOF"
(c :: cs) => if pred c then Right (c, cs) else Left ("did not expect " ++ show c ++ " - " ++ pack cs)
match : Char Parser Char
match d = satisfy (_==_ d)
any : Parser Char
any = satisfy (λ _ => True)
some many : a. Parser a Parser (List a)
many p = some p <|> pure Nil
some p = do
v <- p
vs <- many p
pure (v :: vs)
string : String Parser Unit
string str = go (unpack str)
where
go : List Char Parser Unit
go Nil = pure MkUnit
go (c :: cs) = match c >> go cs
number : Parser Int
number = stringToInt pack <$> some (satisfy isDigit)
-- do
-- digs <- some (satisfy isDigit)
-- pure $ stringToInt $ pack digs
optional : a. Parser a Parser (Maybe a)
optional pa = Just <$> pa <|> pure Nothing
ws : Parser Unit
ws = many (match ' ') >> pure MkUnit
token : String Parser Unit
token str = string str >> ws

36
scripts/aoc25 Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/sh
mkdir -p tmp
echo "Test AoC 2025 solutions"
NCC="node newt.js"
total=0
failed=0
for fn in aoc2025/Day*.newt; do
total=$((total + 1))
echo Test $fn
bn=$(basename $fn)
$NCC $fn -o out.js > tmp/${bn}.compile
if [ $? != "0" ]; then
echo Compile failed for $fn
failed=$((failed + 1))
continue
fi
# if there is a golden file, run the code and compare output
if [ -f ${fn}.golden ]; then
node out.js > tmp/${bn}.out
if [ $? != "0" ]; then
echo Run failed for $fn
failed=$((failed + 1))
continue
fi
if ! diff -q tmp/${bn}.out ${fn}.golden; then
echo "Output mismatch for $fn"
failed=$((failed + 1))
if [ $1 = "--fix" ]; then
cp tmp/${bn}.out ${fn}.golden
fi
fi
fi
done
echo "Total tests: $total"
echo "Failed tests: $failed"