Files
lux/benchmarks/binarytrees.rs
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

48 lines
1.1 KiB
Rust

// Binary Trees benchmark - recursive data structures
enum Tree {
Leaf,
Node(Box<Tree>, Box<Tree>),
}
fn make(depth: i32) -> Tree {
if depth == 0 {
Tree::Leaf
} else {
Tree::Node(Box::new(make(depth - 1)), Box::new(make(depth - 1)))
}
}
fn check(tree: &Tree) -> i64 {
match tree {
Tree::Leaf => 1,
Tree::Node(left, right) => 1 + check(left) + check(right),
}
}
fn main() {
let min_depth = 4;
let max_depth = 14;
// Stretch tree
let stretch_depth = max_depth + 1;
let stretch_tree = make(stretch_depth);
println!("stretch tree check: {}", check(&stretch_tree));
// Long lived tree
let long_lived_tree = make(max_depth);
// Iterate through depths
let mut depth = min_depth;
while depth <= max_depth {
let iterations = 1 << (max_depth - depth + 4);
let mut sum = 0i64;
for _ in 0..iterations {
sum += check(&make(depth));
}
println!("{} trees of depth {} check: {}", iterations, depth, sum);
depth += 2;
}
println!("long lived tree check: {}", check(&long_lived_tree));
}