]> git.lizzy.rs Git - rust.git/blob - library/std/src/sys/common/tests.rs
Rollup merge of #103104 - SUPERCILEX:sep-ref, r=dtolnay
[rust.git] / library / std / src / sys / common / tests.rs
1 use crate::ffi::CString;
2 use crate::hint::black_box;
3 use crate::path::Path;
4 use crate::sys::common::small_c_string::run_path_with_cstr;
5 use core::iter::repeat;
6
7 #[test]
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());
12         Ok(42)
13     });
14     assert_eq!(result.unwrap(), 42);
15 }
16
17 #[test]
18 fn stack_allocation_fails() {
19     let path = Path::new("ab\0");
20     assert!(run_path_with_cstr::<(), _>(path, |_| unreachable!()).is_err());
21 }
22
23 #[test]
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());
29         Ok(42)
30     });
31     assert_eq!(result.unwrap(), 42);
32 }
33
34 #[test]
35 fn heap_allocation_fails() {
36     let mut path = repeat("a").take(384).collect::<String>();
37     path.push('\0');
38     let path = Path::new(&path);
39     assert!(run_path_with_cstr::<(), _>(path, |_| unreachable!()).is_err());
40 }
41
42 #[bench]
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);
46     b.iter(|| {
47         run_path_with_cstr(p, |cstr| {
48             black_box(cstr);
49             Ok(())
50         })
51         .unwrap();
52     });
53 }
54
55 #[bench]
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);
59     b.iter(|| {
60         run_path_with_cstr(p, |cstr| {
61             black_box(cstr);
62             Ok(())
63         })
64         .unwrap();
65     });
66 }