1cdb3e2c8Sopenharmony_ci#![cfg(feature = "checked_conversions")]
2cdb3e2c8Sopenharmony_ci
3cdb3e2c8Sopenharmony_ciuse std::borrow::Cow;
4cdb3e2c8Sopenharmony_ciuse std::ffi::OsStr;
5cdb3e2c8Sopenharmony_ci
6cdb3e2c8Sopenharmony_ciuse getrandom::getrandom;
7cdb3e2c8Sopenharmony_ci
8cdb3e2c8Sopenharmony_ciuse os_str_bytes::OsStrBytes;
9cdb3e2c8Sopenharmony_ciuse os_str_bytes::OsStringBytes;
10cdb3e2c8Sopenharmony_ci
11cdb3e2c8Sopenharmony_cimod common;
12cdb3e2c8Sopenharmony_ci
13cdb3e2c8Sopenharmony_cimod random_common;
14cdb3e2c8Sopenharmony_ciuse random_common::ITERATIONS;
15cdb3e2c8Sopenharmony_ciuse random_common::SMALL_LENGTH;
16cdb3e2c8Sopenharmony_ci
17cdb3e2c8Sopenharmony_ciconst LARGE_LENGTH: usize = 1024;
18cdb3e2c8Sopenharmony_ci
19cdb3e2c8Sopenharmony_ci#[test]
20cdb3e2c8Sopenharmony_cifn test_bytes() -> Result<(), getrandom::Error> {
21cdb3e2c8Sopenharmony_ci    let os_string = random_common::random_os_string(LARGE_LENGTH)?;
22cdb3e2c8Sopenharmony_ci    let string = os_string.to_raw_bytes();
23cdb3e2c8Sopenharmony_ci    assert_eq!(os_string.len(), string.len());
24cdb3e2c8Sopenharmony_ci    assert_eq!(Ok(Cow::Borrowed(&*os_string)), common::from_bytes(&string));
25cdb3e2c8Sopenharmony_ci    Ok(())
26cdb3e2c8Sopenharmony_ci}
27cdb3e2c8Sopenharmony_ci
28cdb3e2c8Sopenharmony_ci#[test]
29cdb3e2c8Sopenharmony_cifn test_vec() -> Result<(), getrandom::Error> {
30cdb3e2c8Sopenharmony_ci    let os_string = random_common::random_os_string(LARGE_LENGTH)?;
31cdb3e2c8Sopenharmony_ci    let string = os_string.clone().into_raw_vec();
32cdb3e2c8Sopenharmony_ci    assert_eq!(os_string.len(), string.len());
33cdb3e2c8Sopenharmony_ci    assert_eq!(Ok(os_string), common::from_vec(string));
34cdb3e2c8Sopenharmony_ci    Ok(())
35cdb3e2c8Sopenharmony_ci}
36cdb3e2c8Sopenharmony_ci
37cdb3e2c8Sopenharmony_ci#[test]
38cdb3e2c8Sopenharmony_cifn test_lossless() -> Result<(), getrandom::Error> {
39cdb3e2c8Sopenharmony_ci    for _ in 0..ITERATIONS {
40cdb3e2c8Sopenharmony_ci        let mut string = vec![0; SMALL_LENGTH];
41cdb3e2c8Sopenharmony_ci        getrandom(&mut string)?;
42cdb3e2c8Sopenharmony_ci        if let Ok(os_string) = OsStr::from_raw_bytes(&string) {
43cdb3e2c8Sopenharmony_ci            assert_eq!(string, &*os_string.to_raw_bytes());
44cdb3e2c8Sopenharmony_ci        }
45cdb3e2c8Sopenharmony_ci    }
46cdb3e2c8Sopenharmony_ci    Ok(())
47cdb3e2c8Sopenharmony_ci}
48