tests/smoke/uglies/type_casting.primi
import std.types
import ._helpers: assert_error
//
// Types of different values.
//
result = type(null)
assert(result == types.null)
result = type(true)
assert(result == bool)
result = type(false)
assert(result == bool)
result = type(1)
assert(result == number)
result = type(-1)
assert(result == number)
result = type(0.123)
assert(result == number)
result = type("")
assert(result == string)
result = type("ahoj")
assert(result == string)
result = type(rx"ahoj")
assert(result == regex)
result = type(rx"a[ho]j")
assert(result == regex)
result = type(rx"")
assert(result == regex)
result = type(type)
assert(result == type)
result = type([])
assert(result == list)
result = type([1,2,'c'])
assert(result == list)
result = type({})
assert(result == dict)
result = type({1: 'a', 2: 'b', 'c': 'd'})
assert(result == dict)
//
// Casting numbers.
//
result = number(1)
assert(result == 1)
result = string(1)
assert(result == "1")
result = bool(1)
assert(result == true)
//
// Casting strings.
//
error = 0
try {
result = number("a")
} catch {
error = 1
}
assert(error == 1)
result = string("a")
assert(result == "a")
result = bool("a")
assert(result == true)
result = regex("a")
assert(result == rx"a")
//
// Casting bools.
//
// Casting true
result = number(true)
assert(result == 1)
result = string(true)
assert(result == "true")
result = bool(true)
assert(result == true)
// Casting false
result = number(false)
assert(result == 0)
result = string(false)
assert(result == "false")
result = bool(false)
assert(result == false)
//
// Casting lists.
//
result = bool(["a"])
assert(result == true)
result = bool([])
assert(result == false)
result = list("ab c")
assert(result == ["a", "b", " ", "c"])
//
// Casting regexes.
//
result = string(rx"a")
assert(result == "a")
result = regex(rx"a")
assert(result == rx"a")
//
// Examples of invalid casts.
//
assert_error(() => {
x_number_to_list = list(1)
})
assert_error(() => {
x_bool_true_to_list = list(true)
})
assert_error(() => {
x_bool_true_to_regex = regex(true)
})
assert_error(() => {
x_bool_false_to_list = list(false)
})
assert_error(() => {
x_bool_false_to_regex = regex(false)
})
assert_error(() => {
x_list_to_number = number(["a"])
})
assert_error(() => {
x_list_to_regex = regex(["a"])
})
assert_error(() => {
x_regex_to_number = number(rx"a")
})
assert_error(() => {
x_regex_to_list = list(rx"a")
})