Files
lux/benchmarks/binarytrees.lux
Brandon Lucas 42fef80a47 feat: add comprehensive benchmark suite with multi-language comparison
Add benchmarks comparing Lux against 7 languages:
- Rust, C, Go (compiled)
- Node.js, Bun (JavaScript JIT)
- Python (interpreted)

Benchmarks:
- Fibonacci (fib 35): recursive function calls
- Prime counting (10k): loops and conditionals
- Sum loop (10M): tight numeric loops
- Ackermann (3,10): deep recursion
- Selection sort (1k): sorting algorithm
- List operations (10k): map/filter/fold with closures

Results show Lux:
- Matches C and Rust performance
- 2-5x faster than Go
- 7-15x faster than Node.js
- 10-285x faster than Python

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 16:17:06 -05:00

43 lines
1.1 KiB
Plaintext

// Binary Trees benchmark - recursive data structures
type Tree =
| Leaf
| Node(Tree, Tree)
fn make(depth: Int): Tree = {
if depth == 0 then Leaf
else Node(make(depth - 1), make(depth - 1))
}
fn check(tree: Tree): Int = {
match tree {
Leaf => 1,
Node(left, right) => 1 + check(left) + check(right)
}
}
fn main(): Unit = {
let maxDepth = 12
let stretchTree = make(maxDepth + 1)
let stretchCheck = check(stretchTree)
Console.print("stretch tree check: " + toString(stretchCheck))
let longLivedTree = make(maxDepth)
let sum4 = sumChecks(256, 4, 0)
Console.print("256 trees of depth 4 check: " + toString(sum4))
let sum6 = sumChecks(64, 6, 0)
Console.print("64 trees of depth 6 check: " + toString(sum6))
let sum8 = sumChecks(16, 8, 0)
Console.print("16 trees of depth 8 check: " + toString(sum8))
Console.print("long lived tree check: " + toString(check(longLivedTree)))
}
fn sumChecks(n: Int, depth: Int, acc: Int): Int = {
if n == 0 then acc
else sumChecks(n - 1, depth, acc + check(make(depth)))
}