rspl 0.1.3

A stream processor language.
Documentation
use rspl::combinators::{compose, filter, map};
use rspl::streams::overeager_receivers::OvereagerReceiver;
use rspl::streams::print;

use std::thread;

#[test]
#[ignore]
fn test_load() {
    const N: usize = 10;

    const fn factorial(mut n: usize) -> usize {
        let mut acc = n;
        while n > 1 {
            acc *= n - 1;
            n -= 1;
        }
        acc
    }

    let is_even = |n: &usize| *n % 2 == 0;
    let plus_one = |n: usize| n + 1;

    let sp = compose(compose(filter(is_even), map(factorial)), map(plus_one));

    let (tx, stream) = OvereagerReceiver::channel(0, 0);
    let input_simulator = thread::spawn(move || {
        for _ in 0..factorial(N) {
            for n in 0..N {
                tx.send(n).unwrap();
            }
        }
    });

    let result = sp.eval(stream);

    let rest = print(result, factorial(N));

    input_simulator.join().unwrap();

    print(rest, factorial(N));
}