mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
72 lines
1.6 KiB
V
72 lines
1.6 KiB
V
// This file tests whether V can generate a convenience default .str() method
|
|
// for a custom struct, when the developer has not defined one himself.
|
|
// The .str() methods are used for string interpolation and for println() calls.
|
|
struct Man {
|
|
name string
|
|
age int
|
|
interests []string
|
|
}
|
|
|
|
fn test_default_struct_string_interpolation() {
|
|
superman := Man{'Superman', 30, ['flying', 'fighting evil', 'being nice']}
|
|
s := '$superman'
|
|
assert s.starts_with('Man{')
|
|
assert s.contains("name: 'Superman'")
|
|
assert s.contains('age: 30')
|
|
assert s.contains('interests: [')
|
|
assert s.contains("'being nice'")
|
|
assert s.ends_with('}')
|
|
// println(s)
|
|
}
|
|
|
|
struct Context {
|
|
pub mut:
|
|
vb [8]f64
|
|
}
|
|
|
|
fn test_fixed_array_struct_string_interpolation() {
|
|
mut ctx := Context{}
|
|
x := 2.32
|
|
ctx.vb = [1.1, x, 3.3, 4.4, 5.0, 6.0, 7.0, 8.9]!
|
|
s := '$ctx'
|
|
assert s.starts_with('Context{')
|
|
assert s.contains('vb: [1.1, 2.32, 3.3, 4.4, 5, 6, 7, 8.9]')
|
|
assert s.ends_with('}')
|
|
}
|
|
|
|
struct Info {
|
|
name string
|
|
dict map[string]int
|
|
}
|
|
|
|
fn test_struct_map_field_string_interpolation() {
|
|
info := Info{
|
|
name: 'test'
|
|
dict: {'a': int(1), 'b': 2}
|
|
}
|
|
s := '$info'
|
|
assert s.starts_with('Info{')
|
|
assert s.contains("name: 'test'")
|
|
assert s.contains("dict: {'a': 1, 'b': 2}")
|
|
assert s.ends_with('}')
|
|
}
|
|
|
|
struct Circular {
|
|
mut:
|
|
next &Circular
|
|
}
|
|
|
|
fn test_stack_circular_elem_auto_str() {
|
|
mut elem := Circular{0}
|
|
elem.next = &elem
|
|
s := '$elem'.replace('\n', '|')
|
|
assert s == 'Circular{| next: &<circular>|}'
|
|
}
|
|
|
|
fn test_heap_circular_elem_auto_str() {
|
|
mut elem := &Circular{0}
|
|
elem.next = elem
|
|
s := '$elem'.replace('\n', '|')
|
|
assert s == '&Circular{| next: &<circular>|}'
|
|
}
|