1 use crate::ffi::CString;
2 use crate::hint::black_box;
4 use crate::sys::common::small_c_string::run_path_with_cstr;
5 use core::iter::repeat;
8 fn stack_allocation_works() {
9 let path = Path::new("abc");
10 let result = run_path_with_cstr(path, |p| {
11 assert_eq!(p, &*CString::new(path.as_os_str().bytes()).unwrap());
14 assert_eq!(result.unwrap(), 42);
18 fn stack_allocation_fails() {
19 let path = Path::new("ab\0");
20 assert!(run_path_with_cstr::<(), _>(path, |_| unreachable!()).is_err());
24 fn heap_allocation_works() {
25 let path = repeat("a").take(384).collect::<String>();
26 let path = Path::new(&path);
27 let result = run_path_with_cstr(path, |p| {
28 assert_eq!(p, &*CString::new(path.as_os_str().bytes()).unwrap());
31 assert_eq!(result.unwrap(), 42);
35 fn heap_allocation_fails() {
36 let mut path = repeat("a").take(384).collect::<String>();
38 let path = Path::new(&path);
39 assert!(run_path_with_cstr::<(), _>(path, |_| unreachable!()).is_err());
43 fn bench_stack_path_alloc(b: &mut test::Bencher) {
44 let path = repeat("a").take(383).collect::<String>();
45 let p = Path::new(&path);
47 run_path_with_cstr(p, |cstr| {
56 fn bench_heap_path_alloc(b: &mut test::Bencher) {
57 let path = repeat("a").take(384).collect::<String>();
58 let p = Path::new(&path);
60 run_path_with_cstr(p, |cstr| {