| 1 | module main |
| 2 | |
| 3 | type Value = int | i64 | u64 | string | []u8 |
| 4 | |
| 5 | fn d(val Value) string { |
| 6 | match val { |
| 7 | int, i64, u64, []u8 { |
| 8 | s := sizeof(val) |
| 9 | x := val |
| 10 | return 'Value is number or byte array, size=${s} ${x}' |
| 11 | } |
| 12 | string { |
| 13 | x := val |
| 14 | return 'Value is string: ${x}' |
| 15 | } |
| 16 | } |
| 17 | } |
| 18 | |
| 19 | fn test_main() { |
| 20 | assert d(Value(0)) == $if new_int ? && x64 { |
| 21 | 'Value is number or byte array, size=8 0' |
| 22 | } $else { |
| 23 | 'Value is number or byte array, size=4 0' |
| 24 | } |
| 25 | assert d(Value(i64(1))) == 'Value is number or byte array, size=8 1' |
| 26 | assert d(Value(u64(2))) == 'Value is number or byte array, size=8 2' |
| 27 | assert d(Value([u8(1), 2])) == $if new_int ? && x64 { |
| 28 | 'Value is number or byte array, size=48 [1, 2]' |
| 29 | } $else { |
| 30 | 'Value is number or byte array, size=32 [1, 2]' |
| 31 | } |
| 32 | assert d(Value('')) == 'Value is string: ' |
| 33 | } |
| 34 | |