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