| 1 | import builtin.wchar |
| 2 | |
| 3 | const little_serial_number = [u16(67), 0, 76, 0, 52, 0, 54, 0, 73, 0, 49, 0, 65, 0, 48, 0, 48, |
| 4 | 0, 54, 0, 52, 0, 57, 0, 0, 0, 0] |
| 5 | const big_serial_number = [u16(0), 67, 0, 76, 0, 52, 0, 54, 0, 73, 0, 49, 0, 65, 0, 48, 0, 48, |
| 6 | 0, 54, 0, 52, 0, 57, 0, 0, 0, 0] |
| 7 | |
| 8 | const wide_serial_number_windows = little_serial_number.map(u8(it)) |
| 9 | |
| 10 | const swide_serial_number = 'CL46I1A00649' |
| 11 | |
| 12 | fn test_from_to_rune() { |
| 13 | for r in swide_serial_number.runes() { |
| 14 | c := wchar.from_rune(r) |
| 15 | assert c.to_rune() == r |
| 16 | } |
| 17 | assert wchar.from_rune(0).to_rune() == 0 |
| 18 | } |
| 19 | |
| 20 | fn test_to_string() { |
| 21 | mut p := voidptr(little_serial_number.data) |
| 22 | $if big_endian { |
| 23 | p = big_serial_number.data |
| 24 | } |
| 25 | $if windows { |
| 26 | p = wide_serial_number_windows.data |
| 27 | } |
| 28 | assert unsafe { wchar.length_in_characters(p) } == swide_serial_number.len |
| 29 | s := unsafe { wchar.to_string(p) } |
| 30 | dump(s) |
| 31 | assert s == swide_serial_number |
| 32 | } |
| 33 | |
| 34 | fn test_from_string() { |
| 35 | x := wchar.from_string(swide_serial_number) |
| 36 | assert unsafe { x[0] } == wchar.from_rune(`C`) |
| 37 | assert unsafe { x[1] } == wchar.from_rune(`L`) |
| 38 | assert unsafe { x[2] } == wchar.from_rune(`4`) |
| 39 | assert unsafe { x[11] } == wchar.from_rune(`9`) |
| 40 | assert unsafe { x[12] } == wchar.zero |
| 41 | } |
| 42 | |