vars/
lib.rs

1#![no_std]
2
3mod core;
4mod tuple;
5mod hcons;
6
7pub use vars_macro::*;
8pub use self::{core::*, hcons::*, tuple::*};
9
10/// Add one number to a another given number
11/// 
12/// Example
13/// 
14/// ```
15/// assert_eq!(vars::add(1,2), 3); // 3
16/// ```
17pub fn add(left: usize, right: usize) -> usize {
18    left + right
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn it_works() {
27        let result = add(2, 2);
28        assert_eq!(result, 4);
29    }
30
31    #[test]
32    fn uncons() {
33        let tup = (1,2,3).uncons();
34    }
35
36    #[test]
37    fn push_front() {
38        let tup = (1,2,3).push_front(0);
39        assert_eq!(tup, (0,1,2,3,));
40    }
41
42    #[test]
43    fn compose() {
44        let sum = |a| move |b| a + b;
45        let mul = |a| move |b| a * b;
46
47        let res = (sum(1), mul(2)).compose(2);
48        assert_eq!(res, 6);
49    }
50
51    #[test]
52    fn variadic_function() {
53        fn accept_vars(v: impl Vars<usize>) {
54            // let r = v.into_hcons();
55
56        }
57
58        let a = (1,2,3).uncons();
59
60        accept_vars((1,2,3).push_front(0));
61    }
62
63    #[test]
64    fn pop_front() {
65        #[derive(Debug)]
66        struct CnC(usize);
67
68        let mut tup: (usize, usize,) = (1,2,);
69
70        let mut r = tup.uncons_mut();
71
72        let v = (&mut (4 as usize),);
73
74        r.1 = v;
75
76        fn consume(t: (usize, (usize, ))) {
77
78        }
79
80        // consume(r.owned());
81
82        let u_8: &usize = &10;
83    }
84
85    #[test]
86    fn hcons_test() {
87        let h = (1,2,);
88
89        fn into_hcons(v: impl Vars<usize>) {
90            let (l1, r1) = v.uncons();
91            let (l2, r2) = r1.uncons();
92            let (l3, r3) = r2.uncons();
93
94            // println!("{:?}, {:?}", l1, l2);
95
96            let (a1, a2) = (1, "str").uncons();
97
98        }
99
100        into_hcons(h);
101
102        // let (a, b) = h.uncons();
103        // let (c, d) = b.uncons();
104
105        // let (e, f) = d.uncons();
106
107        // match c {
108        //     Some(v) => println!("{v}"),
109        //     None => println!("None value found"),
110        // } 
111    }
112
113}