tests/smoke/uglies/type_casting.primi

Summary

Maintainability
Test Coverage
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")
})