propane/spec/test_tree_node_memory_remains.rs
2026-08-11 22:46:04 -04:00

86 lines
3.4 KiB
Rust

use testparser::*;
fn main() {
let entries: [(&str, &str, p_token_t); 51] = [
("byte_val", "byte", TOKEN_byte),
("short_val", "short", TOKEN_short),
("int_val", "int", TOKEN_int),
("long_val", "long", TOKEN_long),
("ssize_t_val", "ssize_t", TOKEN_ssize_t),
("byte_to_short", "short", TOKEN_short),
("byte_to_int", "int", TOKEN_int),
("byte_to_long", "long", TOKEN_long),
("byte_to_ssize_t", "ssize_t", TOKEN_ssize_t),
("short_to_byte", "byte", TOKEN_byte),
("short_to_int", "int", TOKEN_int),
("short_to_long", "long", TOKEN_long),
("short_to_ssize_t", "ssize_t", TOKEN_ssize_t),
("int_to_byte", "byte", TOKEN_byte),
("int_to_short", "short", TOKEN_short),
("int_to_long", "long", TOKEN_long),
("int_to_ssize_t", "ssize_t", TOKEN_ssize_t),
("long_to_byte", "byte", TOKEN_byte),
("long_to_short", "short", TOKEN_short),
("long_to_int", "int", TOKEN_int),
("long_to_ssize_t", "ssize_t", TOKEN_ssize_t),
("ssize_t_to_byte", "byte", TOKEN_byte),
("ssize_t_to_short", "short", TOKEN_short),
("ssize_t_to_int", "int", TOKEN_int),
("ssize_t_to_long", "long", TOKEN_long),
("ubyte_val", "ubyte", TOKEN_ubyte),
("ushort_val", "ushort", TOKEN_ushort),
("uint_val", "uint", TOKEN_uint),
("ulong_val", "ulong", TOKEN_ulong),
("size_t_val", "size_t", TOKEN_size_t),
("ubyte_to_ushort", "ushort", TOKEN_ushort),
("ubyte_to_uint", "uint", TOKEN_uint),
("ubyte_to_ulong", "ulong", TOKEN_ulong),
("ubyte_to_size_t", "size_t", TOKEN_size_t),
("ushort_to_ubyte", "ubyte", TOKEN_ubyte),
("ushort_to_uint", "uint", TOKEN_uint),
("ushort_to_ulong", "ulong", TOKEN_ulong),
("ushort_to_size_t", "size_t", TOKEN_size_t),
("uint_to_ubyte", "ubyte", TOKEN_ubyte),
("uint_to_ushort", "ushort", TOKEN_ushort),
("uint_to_ulong", "ulong", TOKEN_ulong),
("uint_to_size_t", "size_t", TOKEN_size_t),
("ulong_to_ubyte", "ubyte", TOKEN_ubyte),
("ulong_to_ushort", "ushort", TOKEN_ushort),
("ulong_to_uint", "uint", TOKEN_uint),
("ulong_to_size_t", "size_t", TOKEN_size_t),
("size_t_to_ubyte", "ubyte", TOKEN_ubyte),
("size_t_to_ushort", "ushort", TOKEN_ushort),
("size_t_to_int", "int", TOKEN_int),
("size_t_to_ulong", "ulong", TOKEN_ulong),
("main", "int", TOKEN_int),
];
let mut input = String::new();
for (name, ret, _) in entries.iter() {
input.push_str(&format!("def {}() -> {} {{\nreturn 0x42;\n}}\n", name, ret));
}
let mut c = p_context_new(input.as_bytes());
assert_eq!(P_SUCCESS, p_parse(&mut c));
{
let pmod = p_result(&c);
let mut pfds = Vec::new();
let mut pmis = pmod.pModuleItems();
while pmis.valid() {
let pmi = pmis.pModuleItem();
assert!(pmi.valid());
let pfd = pmi.pFunctionDefinition();
if pfd.valid() {
pfds.insert(0, pfd);
}
pmis = pmis.pModuleItems();
}
assert_eq!(51, pfds.len());
for i in 0..pfds.len() {
assert_eq!(entries[i].0, pfds[i].name().data().pvalue.s.as_str());
assert_eq!(entries[i].2, pfds[i].returntype().pType().pTypeBase().pToken1().token());
}
}
p_context_delete(c);
}