Skip to main content

llvm_scratch/core/function/
test.rs

1#[cfg(test)]
2mod parameter_tests {
3    use crate::core::function::*;
4    use crate::core::llvm_string::LLVMString;
5    use crate::core::llvm_type::LLVMType;
6
7    #[test]
8    fn function_type_test() {
9        let param_set = ParameterSet::new(vec![
10            Parameter::new(LLVMString::from("foo"), None, LLVMType::new_int(32)),
11            Parameter::new(LLVMString::from("bar"), None, LLVMType::new_int(64)),
12        ]);
13        let func_type = FunctionType::new(ReturnType::new(LLVMType::new_void(), None), param_set);
14
15        assert_eq!("void (i32 foo, i64 bar)", format!("{}", func_type).as_str());
16    }
17
18    #[test]
19    fn parameter_display_test() {
20        // without parameter attributes
21        let param = Parameter::new(LLVMString::from("foo"), None, LLVMType::new_int(32));
22        assert_eq!("i32 foo", format!("{}", param).as_str());
23
24        // with parameter attributes
25        let mut param2_attrs: ParameterAttributes = Default::default();
26        param2_attrs.add_attr(ParameterAttribute::ZEROEXT);
27        let param2 = Parameter::new(
28            LLVMString::from("bar"),
29            Some(param2_attrs),
30            LLVMType::new_void(),
31        );
32        assert_eq!("void zeroext bar", format!("{}", param2).as_str());
33
34        // ParameterSet
35        let param_set = ParameterSet::new(vec![param, param2]);
36        assert_eq!("(i32 foo, void zeroext bar)", format!("{}", param_set));
37    }
38
39    #[test]
40    fn param_attr_display_test() {
41        // single attribute
42        assert_eq!(
43            "zeroext",
44            format!("{}", ParameterAttribute::ZEROEXT).as_str()
45        );
46        assert_eq!(
47            "signext",
48            format!("{}", ParameterAttribute::SIGNEXT).as_str()
49        );
50
51        // attributes
52        let mut param_attrs: ParameterAttributes = Default::default();
53        param_attrs.add_attr(ParameterAttribute::ZEROEXT);
54        param_attrs.add_attr(ParameterAttribute::SIGNEXT);
55
56        let param_attrs_str = format!("{}", param_attrs);
57        assert!(param_attrs_str.contains("zeroext"));
58        assert!(param_attrs_str.contains("signext"));
59    }
60}