ability to run code and check output in tests

This commit is contained in:
2024-12-28 13:19:15 -08:00
parent 95f90c8698
commit a6e68ac2a2
62 changed files with 459 additions and 31 deletions

2
.gitignore vendored
View File

@@ -2,6 +2,7 @@ build/
*.*~ATTIC
\#*
*~
*.swp
*.log
*.agda
*.agdai
@@ -9,3 +10,4 @@ build/
input.txt
node_modules
mkday.py
tmp

View File

@@ -16,6 +16,9 @@ build/exec/newt.min.js: ${SRCS}
test: build/exec/newt
scripts/test
aoctest: build/exec/newt
scripts/aoc
vscode:
cd newt-vscode && vsce package && code --install-extension *.vsix

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

@@ -0,0 +1,6 @@
aoc2024/day1/eg.txt
part1 11
part2 31
aoc2024/day1/input.txt
part1 1197984
part2 23387399

18
aoc2024/Day10.newt.golden Normal file
View File

@@ -0,0 +1,18 @@
aoc2024/day10/eg.txt
part1 1
part2 16
aoc2024/day10/eg2.txt
part1 2
part2 2
aoc2024/day10/eg3.txt
part1 4
part2 13
aoc2024/day10/eg4.txt
part1 3
part2 3
aoc2024/day10/eg5.txt
part1 36
part2 81
aoc2024/day10/input.txt
part1 510
part2 1058

View File

@@ -0,0 +1,6 @@
aoc2024/day11/eg.txt
part1 55312
part2 65601038650482
aoc2024/day11/input.txt
part1 186175
part2 220566831337810

View File

@@ -0,0 +1,6 @@
aoc2024/day11/eg.txt
part1 55312
part2 65601038650482
aoc2024/day11/input.txt
part1 186175
part2 220566831337810

View File

@@ -0,0 +1,9 @@
aoc2024/day12/eg.txt
part1 140
part2 80
aoc2024/day12/eg2.txt
part1 772
part2 436
aoc2024/day12/input.txt
part1 1450816
part2 865662

View File

@@ -0,0 +1,6 @@
aoc2024/day13/eg.txt
part1 480
part2 875318608908
aoc2024/day13/input.txt
part1 28059
part2 102255878088512

109
aoc2024/Day14.newt.golden Normal file
View File

@@ -0,0 +1,109 @@
aoc2024/day14/input.txt
(121, 119, 119, 132)
part1 226179492
500
7502
..................................*.*................................................................
.....................................................................................................
...................................*..........................*......................................
...............*..............................................*..................................*...
.....*.......................*..............................*........................................
.....................................................................................................
.....................................................................................................
.....................................................................................................
.............*.........................*.............................................................
........................................................*............................................
.....................................................................................................
.....................................................................................................
......................................................................................*..............
........................................................*.*..........................................
....................................*................................................................
.....................................................................................................
....................................................................*................................
.................*...................................................................................
....................................*...............*******************************..................
..................*..................*............*.*.............................*..................
.......*............................................*.............................*..**..............
....................................................*.............................*..................
.......*........................*...................*.............................*..................
....................................................*..............*..............*..............*...
.................*..................................*.............***.............*..................
........*...........................................*............*****............*...*..............
....................................................*...........*******...........*..................
....................................................*..........*********..........*...*..............
....................................................*............*****............*..................
....................................................*...........*******...........*.......*..........
.....................*..............................*..........*********..........*.................*
....................................................*.........***********.........*..................
......*.............................................*........*************........*..................
............................................*.......*..........*********..........*..................
....................................................*.........***********.........*..................
....................................................*........*************........*..................
....................................................*.......***************.......*..................
....................................................*......*****************......*..................
....................................................*........*************........*..................
....................................................*.......***************.......*..................
....................................................*......*****************......*..................
...........*..........................*.............*.....*******************.....*..................
.......*...*........................................*....*********************....*..................
....................................................*.............***.............*..................
.........*......................................*...*.............***.............*..................
...................................*................*.............***.............*..................
....................................................*.............................*.......*..........
......*...*.........................................*.............................*..................
.....................*..............................*.............................*..................
.............................*......................*.............................*..................
.................................*.........*........*******************************..................
............*....................................*..........................................*....*...
.........*........*...........................................*......................*...............
...................................................*.*..............*................................
.....................................................................................................
....*..............................................*..........................*......................
....................................*..............................*.................................
..................*..................................................................................
....*...............................................*..............*.................*...............
..*.*....................................*................*..........................................
................*..............*...............................*.....................................
......*..........*..............*.......................................*............................
......................................................*..............................................
.................*............................................................*......................
.....................................................................................................
..................................................................................*...*..............
.....................................................................................................
....................*................................................................*...............
.....................................................................................................
.....................................................................................................
............*...........................................................................*............
.....................................................................................................
.......*...*.......................................................................*.................
........................................*.......................................................*....
...........*........*............*..................................................................*
................................................................................................*....
...............*...............................*.....................................................
..*......................................................*..................*.......................*
.........*...........................................................................................
*.....................*.........................................................................*....
...............................................................................*.....................
.....................................................................................................
........................................................*..........................*.................
.......................................*.............................................................
.....................................................................................................
*..................................*.................................................................
.......................................................*.............................................
.......................................*.....................*.......................................
..............*.*.....................................*......................................*.......
.....................................................................................................
.....................................................................................................
................................*....................................................................
......*..............................................................................................
.......................*....*........................................................................
..........................*...................................................*...........*..........
.......*...................................................*...................*.*...................
.......................*.............................................................................
..........*...........................................*..............................................
...................................................................*.................................
......................................*............................*.................................
..........................................*............*....................*........................
.....................................................................................................
...*.................................................................................................

View File

@@ -0,0 +1,6 @@
aoc2024/day15/eg.txt
part1 10092
part2 9021
aoc2024/day15/input.txt
part1 1406628
part2 1432781

View File

@@ -0,0 +1,9 @@
aoc2024/day16/eg.txt
part1 7036
part2 45
aoc2024/day16/eg2.txt
part1 11048
part2 64
aoc2024/day16/input.txt
part1 90460
part2 575

11
aoc2024/Day17.newt.golden Normal file
View File

@@ -0,0 +1,11 @@
aoc2024/day17/eg.txt
part1 4,6,3,5,6,3,5,2,1,0
fail
aoc2024/day17/eg2.txt
part1 5,7,3,0
part2 117440
aoc2024/day17/input.txt
part1 5,0,3,5,7,6,1,5,4
part2 164516454365621

10
aoc2024/Day18.newt.golden Normal file
View File

@@ -0,0 +1,10 @@
aoc2024/day18/eg.txt
12
part1 22
best 20
part2 6,1
aoc2024/day18/input.txt
1024
part1 260
best 2881
part2 24,48

View File

@@ -0,0 +1,6 @@
aoc2024/day19/eg.txt
part1 6
part2 16
aoc2024/day19/input.txt
part1 371
part2 650354687260341

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

@@ -0,0 +1,6 @@
aoc2024/day2/eg.txt
part1 2
part2 4
aoc2024/day2/input.txt
part1 524
part2 569

View File

@@ -0,0 +1,8 @@
aoc2024/day20/eg.txt
base 84
part1 1
part2 285
aoc2024/day20/input.txt
base 9440
part1 1332
part2 987695

View File

@@ -0,0 +1,8 @@
aoc2024/day20/eg.txt
base 84
part1 1
part2 285
aoc2024/day20/input.txt
base 9440
part1 1332
part2 987695

View File

@@ -0,0 +1,8 @@
aoc2024/day21/eg.txt
[("0", 3, 1), ("1", 2, 0), ("2", 2, 1), ("3", 2, 2), ("4", 1, 0), ("5", 1, 1), ("6", 1, 2), ("7", 0, 0), ("8", 0, 1), ("9", 0, 2), ("A", 3, 2)]
part1 126384
part2 154115708116294
aoc2024/day21/input.txt
[("0", 3, 1), ("1", 2, 0), ("2", 2, 1), ("3", 2, 2), ("4", 1, 0), ("5", 1, 1), ("6", 1, 2), ("7", 0, 0), ("8", 0, 1), ("9", 0, 2), ("A", 3, 2)]
part1 248108
part2 303836969158972

View File

@@ -0,0 +1,8 @@
aoc2024/day21/eg.txt
[("0", 3, 1), ("1", 2, 0), ("2", 2, 1), ("3", 2, 2), ("4", 1, 0), ("5", 1, 1), ("6", 1, 2), ("7", 0, 0), ("8", 0, 1), ("9", 0, 2), ("A", 3, 2)]
part1 126384
part2 154115708116294
aoc2024/day21/input.txt
[("0", 3, 1), ("1", 2, 0), ("2", 2, 1), ("3", 2, 2), ("4", 1, 0), ("5", 1, 1), ("6", 1, 2), ("7", 0, 0), ("8", 0, 1), ("9", 0, 2), ("A", 3, 2)]
part1 248108
part2 303836969158972

View File

@@ -0,0 +1,6 @@
aoc2024/day22/eg2.txt
part1 37990510
part2 23
aoc2024/day22/input.txt
part1 13429191512
part2 1582

View File

@@ -0,0 +1,6 @@
aoc2024/day22/eg2.txt
part1 37990510
part2 23
aoc2024/day22/input.txt
part1 13429191512
part2 1582

10
aoc2024/Day23.newt.golden Normal file
View File

@@ -0,0 +1,10 @@
aoc2024/day23/eg.txt
32 pairs
64 dpairs
part1 7
part2 co,de,ka,ta
aoc2024/day23/input.txt
3380 pairs
6760 dpairs
part1 1170
part2 bo,dd,eq,ik,lo,lu,ph,ro,rr,rw,uo,wx,yg

View File

@@ -177,7 +177,6 @@ run : String -> IO Unit
run fn = do
putStrLn fn
text <- readFile fn
putStrLn text
let (Right (wires, gates)) = parseFile text | Left msg => putStrLn $ "fail: " ++ msg
let state = foldMap const EmptyMap wires
let gateMap = foldMap const EmptyMap $ map (\ gate => (out gate, gate)) gates

View File

@@ -0,0 +1,8 @@
aoc2024/day24/input.txt
part1 51745744348272
SWAP z18 and hmt
SWAP bfq and z27
SWAP z31 and hkh
SWAP fjp and bng
part2 bfq,bng,fjp,hkh,hmt,z18,z27,z31

View File

@@ -55,7 +55,6 @@ run : String -> IO Unit
run fn = do
putStrLn fn
text <- readFile fn
putStrLn text
let chunks = parseFile text
let (locks,keys) = splitKeys chunks Nil Nil
debugLog (length locks, length keys)

View File

@@ -0,0 +1,6 @@
aoc2024/day25/eg.txt
(2, 3)
part1 3
aoc2024/day25/input.txt
(250, 250)
part1 3397

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

@@ -0,0 +1,6 @@
aoc2024/day3/eg.txt
part1 161
part2 161
aoc2024/day3/input.txt
part1 164730528
part2 70478672

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

@@ -0,0 +1,6 @@
aoc2024/day4/eg.txt
part1 18
part2 9
aoc2024/day4/input.txt
part1 2591
part2 1880

8
aoc2024/Day5.newt.golden Normal file
View File

@@ -0,0 +1,8 @@
aoc2024/day5/eg.txt
part1 143
3
part2 123
aoc2024/day5/input.txt
part1 5268
107
part2 5799

8
aoc2024/Day6.newt.golden Normal file
View File

@@ -0,0 +1,8 @@
aoc2024/day6/eg.txt
part1 41
part2 6
100
aoc2024/day6/input.txt
part1 5331
part2 1812
16900

6
aoc2024/Day7.newt.golden Normal file
View File

@@ -0,0 +1,6 @@
aoc2024/day7/eg.txt
part1 3749
part2 11387
aoc2024/day7/input.txt
part1 21572148763543
part2 581941094529163

10
aoc2024/Day8.newt.golden Normal file
View File

@@ -0,0 +1,10 @@
aoc2024/day8/eg.txt
maxrow 11
maxcol 11
part1 14
part2 34
aoc2024/day8/input.txt
maxrow 49
maxcol 49
part1 364
part2 1231

8
aoc2024/Day9.newt.golden Normal file
View File

@@ -0,0 +1,8 @@
aoc2024/day9/eg.txt
10 files
part1 1928
part2 2858
aoc2024/day9/input.txt
10000 files
part1 6283404590840
part2 6304576012713

34
scripts/aoc Executable file
View File

@@ -0,0 +1,34 @@
#!/bin/sh
mkdir -p tmp
echo "Test AoC 2024 solutions"
total=0
failed=0
for fn in aoc2024/Day*.newt; do
total=$((total + 1))
echo Test $fn
bn=$(basename $fn)
./build/exec/newt $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
bun run 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))
fi
fi
done
echo "Total tests: $total"
echo "Failed tests: $failed"

View File

@@ -1,11 +1,31 @@
#!/bin/sh
SAMPLES=$(find playground/samples -name "*.newt")
for i in tests/black/*.newt $SAMPLES aoc2024/*.newt; do
./build/exec/newt $i
total=0
failed=0
for fn in tests/*.newt ; do
total=$((total + 1))
echo Test $fn
bn=$(basename $fn)
./build/exec/newt $fn -o out.js > tmp/${bn}.compile
if [ $? != "0" ]; then
echo FAIL $i
exit -1
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
bun run 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))
fi
fi
echo $?
done
echo "Total tests: $total"
echo "Failed tests: $failed"

1
tests/Prelude.newt Symbolic link
View File

@@ -0,0 +1 @@
../newt/Prelude.newt

1
tests/SortedMap.newt Symbolic link
View File

@@ -0,0 +1 @@
../newt/SortedMap.newt

21
tests/TestMap.newt Normal file
View File

@@ -0,0 +1,21 @@
module TestMap
import SortedMap
main : IO Unit
main = do
let m = updateMap 2 0 EmptyMap
debugLog $ toList m
debugLog $ toList $ deleteMap 2 m
debugLog $ toList $ updateMap 2 3 m
debugLog $ toList $ updateMap 1 3 m
let x = 4 :: 1 :: 5 :: 7 :: 2 :: 9 :: 3 :: 10 :: 6 :: 0 :: 11 :: 12 :: 13 :: 20 :: 14 :: 16 :: 17 :: 8 :: Nil
let m = foldl (\ m x => updateMap x MkUnit m) EmptyMap x
debugLog $ toList m
debugLog $ leftMost m
debugLog $ rightMost m
_ <- for x $ \ n => do
putStrLn $ "ohne " ++ show n
-- debugLog $ m
debugLog $ map fst $ toList $ deleteMap n m
putStrLn ""

44
tests/TestMap.newt.golden Normal file
View File

@@ -0,0 +1,44 @@
[(2, 0)]
[]
[(2, 3)]
[(1, 3), (2, 0)]
[(0, (MkUnit)), (1, (MkUnit)), (2, (MkUnit)), (3, (MkUnit)), (4, (MkUnit)), (5, (MkUnit)), (6, (MkUnit)), (7, (MkUnit)), (8, (MkUnit)), (9, (MkUnit)), (10, (MkUnit)), (11, (MkUnit)), (12, (MkUnit)), (13, (MkUnit)), (14, (MkUnit)), (16, (MkUnit)), (17, (MkUnit)), (20, (MkUnit))]
(Just _ (0, (MkUnit)))
(Just _ (20, (MkUnit)))
ohne 4
[0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 1
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 5
[0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 7
[0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 2
[0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 9
[0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 3
[0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 20]
ohne 6
[0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 0
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20]
ohne 11
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17, 20]
ohne 12
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 20]
ohne 13
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 17, 20]
ohne 20
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17]
ohne 14
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 20]
ohne 16
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20]
ohne 17
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 20]
ohne 8
[0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 20]

View File

@@ -1,24 +0,0 @@
module Prelude
data Nat : U where
Z : Nat
S : Nat -> Nat
data Maybe : U -> U where
Just : {a : U} -> a -> Maybe a
Nothing : {a : U} -> Maybe a
data Either : U -> U -> U where
Left : {a b : U} -> a -> Either a b
Right : {a b : U} -> b -> Either a b
data List : U -> U where
Nil : {a : U} -> List a
Cons : {a : U} -> a -> List a -> List a
-- Currently if I say _::_ = Cons, it gets curried
infixr 7 _::_
_::_ : {a : U} -> a -> List a -> List a
_::_ x xs = Cons x xs