llvm_scratch/core/function/
test.rs1#[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 let param = Parameter::new(LLVMString::from("foo"), None, LLVMType::new_int(32));
22 assert_eq!("i32 foo", format!("{}", param).as_str());
23
24 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 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 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 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}