wasm_test/
lib.rs

1struct Counter {
2    count: u32,
3}
4
5impl Counter {
6    fn new() -> Counter {
7        Counter { count: 0 }
8    }
9}
10
11impl Iterator for Counter {
12    type Item = u32;
13
14    fn next(&mut self) -> Option<Self::Item> {
15        self.count += 1;
16        if self.count < 6 {
17            Some(self.count)
18        } else {
19            None
20        }
21    }
22}
23
24/// Adds one to the number given.
25///
26/// # Examples
27///
28/// ```
29/// let five = 5;
30///
31/// assert_eq!(6, wasm_test::add_one(5));
32/// ```
33#[no_mangle]
34pub extern "C" fn add_one(a: u32) -> u32 {
35    a + 1
36}
37
38/// Test iterator function in wasm
39///
40/// # Examples
41///
42/// ```
43/// assert_eq!(18, wasm_test::iterators());
44/// ```
45#[no_mangle]
46pub extern "C" fn iterators() -> u32 {
47    Counter::new()
48        .zip(vec![1, 2, 3, 4, 5].iter().skip(1))
49        .map(|(a, b)| a * b)
50        .filter(|x| x % 3 == 0)
51        .sum()
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57
58    #[test]
59    fn add_one_test() {
60        assert_eq!(add_one(3), 4);
61    }
62
63    #[test]
64    fn iterators_test() {
65        assert_eq!(iterators(), 18);
66    }
67}