use rinq::QueryBuilder;
fn main() {
println!("=== RINQ Functional Operations ===\n");
let product: Vec<i32> = QueryBuilder::from(vec![1, 2, 3, 4, 5])
.scan(1, |acc, x| acc * x)
.collect();
println!("Running product: {:?}", product);
let pairs: Vec<(i32, i32)> = QueryBuilder::from(vec![1, 3, 6, 10, 15])
.pairwise()
.collect();
let diffs: Vec<i32> = pairs.iter().map(|(a, b)| b - a).collect();
println!("Pairwise diffs: {:?}", diffs);
let a = vec![1_i32, 2, 3];
let b = vec![10_i32, 20, 30];
let sums: Vec<i32> = QueryBuilder::from(a).zip_with(b, |x, y| x + y).collect();
println!("Zip sum: {:?}", sums);
let fib: Vec<u64> =
QueryBuilder::unfold_bounded((0_u64, 1_u64), |(a, b)| Some((a, (b, a + b))), 8).collect();
println!("Fibonacci(8): {:?}", fib);
let words: Vec<&str> = QueryBuilder::from(vec!["hello", "world", "rinq"])
.intersperse("-")
.collect();
println!("Intersperse: {:?}", words);
let deduped: Vec<i32> = QueryBuilder::from(vec![1, 1, 2, 3, 3, 3, 4])
.dedup()
.collect();
println!("Dedup: {:?}", deduped);
}