mirror of
https://github.com/Nexoniarz/Finch.git
synced 2026-11-03 08:54:25 +00:00
A small, fast programming language on LLVM with C-like syntax. - Lexer, recursive-descent parser, single-pass type checker + LLVM IR codegen, O2 pipeline - Types: int/float/bool/char/str, sized i8..u64/f32/f64, pointers ptr[T] with addr()/.value/null - Functions (fn ... -> T), if/else, while, for..in, break/continue, Go-style operator precedence - Implicit conversions only when lossless; literals adapt to their target type - Runtime checks for division by zero, MIN/-1 and null .value - C interop: import "header.h" via libclang, link "lib" with pkg-config, link-error advice - Human-readable errors with source excerpts - Test suite (34 tests), examples, docs for beginners/technicians/engineers in English and Polish Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 lines
971 B
Shell
Executable file
36 lines
971 B
Shell
Executable file
#!/usr/bin/env bash
|
|
# Finch test suite.
|
|
# tests/run/*.fn must compile and print exactly what is in the matching .out file
|
|
# tests/fail/*.fn must fail; the first line is "// expect: <text that must appear in the error>"
|
|
set -u
|
|
cd "$(dirname "$0")"
|
|
FINCH=${FINCH:-../build/finch}
|
|
pass=0; failed=0
|
|
|
|
for f in run/*.fn; do
|
|
want="${f%.fn}.out"
|
|
got=$("$FINCH" run "$f" 2>&1)
|
|
if [ "$got" == "$(cat "$want")" ]; then
|
|
pass=$((pass + 1))
|
|
else
|
|
failed=$((failed + 1))
|
|
echo "FAIL $f"
|
|
diff <(echo "$got") "$want" | head -20
|
|
fi
|
|
done
|
|
|
|
for f in fail/*.fn; do
|
|
expect=$(head -1 "$f" | sed -n 's|^// expect: ||p')
|
|
got=$("$FINCH" run "$f" 2>&1)
|
|
status=$?
|
|
if [ $status -ne 0 ] && [[ "$got" == *"$expect"* ]]; then
|
|
pass=$((pass + 1))
|
|
else
|
|
failed=$((failed + 1))
|
|
echo "FAIL $f (wanted: $expect)"
|
|
echo "$got" | head -5
|
|
fi
|
|
done
|
|
|
|
echo "$pass passed, $failed failed"
|
|
[ $failed -eq 0 ]
|