File: tests.rs

package info (click to toggle)
rust-ucs2 0.3.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 132 kB
  • sloc: makefile: 4
file content (75 lines) | stat: -rw-r--r-- 1,925 bytes parent folder | download
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]);
}