v/vlib/v/tests/sumtype_str_test.v

78 lines
1.5 KiB
V

struct Abc {
foo int
bar bool
str string
}
type ST = int | string | bool | Abc
fn test_int_st_str() {
a := ST(0)
assert '$a' == 'ST(0)'
assert a.str() == 'ST(0)'
}
fn test_string_st_str() {
a := ST('test')
assert '$a' == 'ST(\'test\')'
assert a.str() == 'ST(\'test\')'
}
fn test_struct_st_str() {
a := ST(Abc{})
assert '$a' == 'ST(Abc{\n foo: 0\n bar: false\n str: \'\'\n})'
assert a.str() == 'ST(Abc{\n foo: 0\n bar: false\n str: \'\'\n})'
}
fn test_bool_st_str() {
a := ST(false)
assert '$a' == 'ST(false)'
assert a.str() == 'ST(false)'
}
struct Container {
st ST
}
fn test_in_struct() {
c := Container{ST(0)}
assert '$c' == 'Container{\n st: ST(0)\n}'
assert c.str() == 'Container{\n st: ST(0)\n}'
}
fn test_unknown_value() {
c := Container{}
assert '$c' == 'Container{\n st: unknown sum type value\n}'
assert c.str() == 'Container{\n st: unknown sum type value\n}'
}
fn test_nested_in_struct() {
abc := Abc{}
c := Container{ST(abc)}
assert '$c' == 'Container{\n st: ST(Abc{\n foo: 0\n bar: false\n str: \'\'\n })\n}'
assert c.str() == 'Container{\n st: ST(Abc{\n foo: 0\n bar: false\n str: \'\'\n })\n}'
}
fn test_pointer() {
st := ST(0)
assert '${&st}' == '&ST(0)'
}
struct Xyz {}
type Hola = Abc | Xyz
fn (h Hola) str() string {
return 'Hola'
}
struct HolaContainer {
h Hola
}
fn test_custom_str_method() {
h := HolaContainer{}
assert h.str() == 'HolaContainer{\n h: Hola\n}'
assert '$h' == 'HolaContainer{\n h: Hola\n}'
}