1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
use ucs2::{decode, decode_with, encode, ucs2_cstr, Error};
#[test]
fn encoding() {
let input = "őэ╋";
let mut buffer = [0u16; 3];
assert_eq!(encode(input, &mut buffer), Ok(3));
assert_eq!(buffer[..], [0x0151, 0x044D, 0x254B]);
let mut buffer = [0u16; 2];
assert_eq!(encode(input, &mut buffer), Err(Error::BufferOverflow));
let input = "😎";
assert_eq!(encode(input, &mut buffer), Err(Error::MultiByte));
}
#[test]
fn decoding() {
let input = "$¢ह한";
let mut u16_buffer = [0u16; 4];
assert_eq!(encode(input, &mut u16_buffer), Ok(4));
let mut u8_buffer = [0u8; 9];
assert_eq!(decode(&u16_buffer, &mut u8_buffer), Ok(9));
assert_eq!(core::str::from_utf8(&u8_buffer[0..9]), Ok("$¢ह한"));
// `decode` has three branches that can return `BufferOverflow`,
// check each of them.
assert_eq!(
decode(&u16_buffer, &mut u8_buffer[..0]),
Err(Error::BufferOverflow)
);
assert_eq!(
decode(&u16_buffer, &mut u8_buffer[..1]),
Err(Error::BufferOverflow)
);
assert_eq!(
decode(&u16_buffer, &mut u8_buffer[..3]),
Err(Error::BufferOverflow)
);
}
#[test]
fn decoding_with() {
let input = "$¢ह한";
let mut u16_buffer = [0u16; 4];
let result = encode(input, &mut u16_buffer);
assert_eq!(result.unwrap(), 4);
let mut u8_buffer = [0u8; 9];
let mut pos = 0;
let result = decode_with(&u16_buffer, |bytes| {
for byte in bytes.into_iter() {
u8_buffer[pos] = *byte;
pos += 1;
}
Ok(())
});
assert_eq!(result.unwrap(), 9);
assert_eq!(core::str::from_utf8(&u8_buffer[0..9]), Ok("$¢ह한"));
}
#[test]
fn test_macro() {
const S1: [u16; 4] = ucs2_cstr!("abc");
const S2: &[u16] = &ucs2_cstr!("$¢ह한");
assert_eq!(S1, [97, 98, 99, 0]);
assert_eq!(S2, [36, 162, 2361, 54620, 0]);
}
|