1#![no_std]
2
3mod core;
4mod tuple;
5mod hcons;
6
7pub use vars_macro::*;
8pub use self::{core::*, hcons::*, tuple::*};
9
10pub 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 }
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 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 let (a1, a2) = (1, "str").uncons();
97
98 }
99
100 into_hcons(h);
101
102 }
112
113}