diff --git a/src/dc_array.rs b/src/dc_array.rs index 16fc163ab..d50a54813 100644 --- a/src/dc_array.rs +++ b/src/dc_array.rs @@ -401,3 +401,98 @@ pub unsafe fn dc_arr_to_string(arr: *const uint32_t, cnt: libc::c_int) -> *mut l ); strdup(to_cstring(res).as_ptr()) } + +#[cfg(test)] +mod tests { + use super::*; + use std::ffi::CStr; + + #[test] + fn test_dc_array() { + unsafe { + let arr = dc_array_new(7 as size_t); + assert_eq!(dc_array_get_cnt(arr), 0); + + let mut i: libc::c_int = 0; + while i < 1000 { + dc_array_add_id(arr, (i + 2) as uint32_t); + i += 1 + } + + assert_eq!(dc_array_get_cnt(arr), 1000); + + i = 0; + + while i < 1000i32 { + assert_eq!( + dc_array_get_id(arr, i as size_t), + (i + 1i32 * 2i32) as libc::c_uint + ); + i += 1 + } + + assert_eq!(dc_array_get_id(arr, -1i32 as size_t), 0); + assert_eq!(dc_array_get_id(arr, 1000 as size_t), 0); + assert_eq!(dc_array_get_id(arr, 1001 as size_t), 0); + + dc_array_empty(arr); + + assert_eq!(dc_array_get_cnt(arr), 0); + + dc_array_add_id(arr, 13 as uint32_t); + dc_array_add_id(arr, 7 as uint32_t); + dc_array_add_id(arr, 666 as uint32_t); + dc_array_add_id(arr, 0 as uint32_t); + dc_array_add_id(arr, 5000 as uint32_t); + + dc_array_sort_ids(arr); + + assert_eq!(dc_array_get_id(arr, 0 as size_t), 0); + assert_eq!(dc_array_get_id(arr, 1 as size_t), 7); + assert_eq!(dc_array_get_id(arr, 2 as size_t), 13); + assert_eq!(dc_array_get_id(arr, 3 as size_t), 666); + + let str = dc_array_get_string(arr, b"-\x00" as *const u8 as *const libc::c_char); + assert_eq!( + CStr::from_ptr(str as *const libc::c_char).to_str().unwrap(), + "0-7-13-666-5000" + ); + free(str as *mut libc::c_void); + + dc_array_empty(arr); + + dc_array_add_ptr( + arr, + b"XX\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, + ); + dc_array_add_ptr( + arr, + b"item1\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, + ); + dc_array_add_ptr( + arr, + b"bbb\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, + ); + dc_array_add_ptr( + arr, + b"aaa\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, + ); + dc_array_sort_strings(arr); + + let str = dc_array_get_ptr(arr, 0 as size_t) as *mut libc::c_char; + assert_eq!(CStr::from_ptr(str).to_str().unwrap(), "XX"); + + let str = dc_array_get_ptr(arr, 1 as size_t) as *mut libc::c_char; + assert_eq!(CStr::from_ptr(str).to_str().unwrap(), "aaa"); + + let str = dc_array_get_ptr(arr, 2 as size_t) as *mut libc::c_char; + assert_eq!(CStr::from_ptr(str).to_str().unwrap(), "bbb"); + + let str = dc_array_get_ptr(arr, 3 as size_t) as *mut libc::c_char; + assert_eq!(CStr::from_ptr(str).to_str().unwrap(), "item1"); + + dc_array_unref(arr); + } + } + +} diff --git a/tests/stress.rs b/tests/stress.rs index b72698a50..58b34761d 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -412,201 +412,6 @@ unsafe fn stress_functions(context: &Context) { free(fn0 as *mut libc::c_void); free(fn1 as *mut libc::c_void); } - let arr = dc_array_new(7i32 as size_t); - if 0 != !(dc_array_get_cnt(arr) == 0) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 633i32, - b"dc_array_get_cnt(arr) == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - let mut i: libc::c_int = 0; - while i < 1000i32 { - dc_array_add_id(arr, (i + 1i32 * 2i32) as uint32_t); - i += 1 - } - if 0 != !(dc_array_get_cnt(arr) == 1000) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 639i32, - b"dc_array_get_cnt(arr) == TEST_CNT\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - i = 0i32; - while i < 1000i32 { - if 0 != !(dc_array_get_id(arr, i as size_t) == (i + 1i32 * 2i32) as libc::c_uint) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 642i32, - b"dc_array_get_id(arr, i) == i+1*2\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - i += 1 - } - if 0 != !(dc_array_get_id(arr, -1i32 as size_t) == 0i32 as libc::c_uint) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 644i32, - b"dc_array_get_id(arr, -1) == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(dc_array_get_id(arr, 1000i32 as size_t) == 0i32 as libc::c_uint) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 645i32, - b"dc_array_get_id(arr, TEST_CNT) == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - if 0 != !(dc_array_get_id(arr, (1000i32 + 1i32) as size_t) == 0i32 as libc::c_uint) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 646i32, - b"dc_array_get_id(arr, TEST_CNT+1) == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - dc_array_empty(arr); - if 0 != !(dc_array_get_cnt(arr) == 0) as usize { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 649i32, - b"dc_array_get_cnt(arr) == 0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - dc_array_add_id(arr, 13i32 as uint32_t); - dc_array_add_id(arr, 7i32 as uint32_t); - dc_array_add_id(arr, 666i32 as uint32_t); - dc_array_add_id(arr, 0i32 as uint32_t); - dc_array_add_id(arr, 5000i32 as uint32_t); - dc_array_sort_ids(arr); - if 0 != !(dc_array_get_id(arr, 0i32 as size_t) == 0i32 as libc::c_uint - && dc_array_get_id(arr, 1i32 as size_t) == 7i32 as libc::c_uint - && dc_array_get_id(arr, 2i32 as size_t) == 13i32 as libc::c_uint - && dc_array_get_id(arr, 3i32 as size_t) == 666i32 as libc::c_uint) as usize - { - __assert_rtn((*::std::mem::transmute::<&[u8; 17], - &[libc::c_char; 17]>(b"stress_functions\x00")).as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as - *const libc::c_char, 657i32, - b"dc_array_get_id(arr, 0)==0 && dc_array_get_id(arr, 1)==7 && dc_array_get_id(arr, 2)==13 && dc_array_get_id(arr, 3)==666\x00" - as *const u8 as *const libc::c_char); - } else { - }; - let str_0 = dc_array_get_string(arr, b"-\x00" as *const u8 as *const libc::c_char); - if 0 != !(strcmp( - str_0, - b"0-7-13-666-5000\x00" as *const u8 as *const libc::c_char, - ) == 0i32) as usize - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 660i32, - b"strcmp(str, \"0-7-13-666-5000\")==0\x00" as *const u8 as *const libc::c_char, - ); - } else { - }; - free(str_0 as *mut libc::c_void); - dc_array_empty(arr); - dc_array_add_ptr( - arr, - b"XX\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, - ); - dc_array_add_ptr( - arr, - b"item1\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, - ); - dc_array_add_ptr( - arr, - b"bbb\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, - ); - dc_array_add_ptr( - arr, - b"aaa\x00" as *const u8 as *const libc::c_char as *mut libc::c_void, - ); - dc_array_sort_strings(arr); - if 0 != !(strcmp( - b"XX\x00" as *const u8 as *const libc::c_char, - dc_array_get_ptr(arr, 0i32 as size_t) as *mut libc::c_char, - ) == 0i32) as usize - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 674i32, - b"strcmp(\"XX\", (char*)dc_array_get_ptr(arr, 0))==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"aaa\x00" as *const u8 as *const libc::c_char, - dc_array_get_ptr(arr, 1i32 as size_t) as *mut libc::c_char, - ) == 0i32) as usize - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 675i32, - b"strcmp(\"aaa\", (char*)dc_array_get_ptr(arr, 1))==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"bbb\x00" as *const u8 as *const libc::c_char, - dc_array_get_ptr(arr, 2i32 as size_t) as *mut libc::c_char, - ) == 0i32) as usize - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 676i32, - b"strcmp(\"bbb\", (char*)dc_array_get_ptr(arr, 2))==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - if 0 != !(strcmp( - b"item1\x00" as *const u8 as *const libc::c_char, - dc_array_get_ptr(arr, 3i32 as size_t) as *mut libc::c_char, - ) == 0i32) as usize - { - __assert_rtn( - (*::std::mem::transmute::<&[u8; 17], &[libc::c_char; 17]>(b"stress_functions\x00")) - .as_ptr(), - b"../cmdline/stress.c\x00" as *const u8 as *const libc::c_char, - 677i32, - b"strcmp(\"item1\", (char*)dc_array_get_ptr(arr, 3))==0\x00" as *const u8 - as *const libc::c_char, - ); - } else { - }; - dc_array_unref(arr); let p1: *mut dc_param_t = dc_param_new(); dc_param_set_packed( p1,