V version: V 0.2.4 501b293
OS: windows, Microsoft Windows 10 Home Single Language v19044 64-bit
What did you do?
v test .
code5_test.v
type SumType = int | []SumType
struct Foo1 {
a int
b []int
}
fn test_func() {
data := Foo1{120, [130, 140]}
mut res1 := map[string]SumType{}
$for field in Foo1.fields {
$if field.typ is int {
res1[field.name] = data.$(field.name) // this fails during compilation
} $else $if field.typ is []int{
res1[field.name] = data.$(field.name)
}
}
mut res2 := map[string]SumType{}
$for field in Foo1.fields {
$if field.typ is int {
e := data.$(field.name)
res2[field.name] = e // this compiles successfully
} $else $if field.typ is []int{
e := data.$(field.name)
res2[field.name] = e
}
}
assert res1 == res2
}
code4_test.v
type SumType = int | []int // difference
struct Foo1 {
a int
b []int
}
fn test_func() {
data := Foo1{120, [130, 140]}
mut res1 := map[string]SumType{}
$for field in Foo1.fields {
$if field.typ is int {
res1[field.name] = data.$(field.name)
} $else $if field.typ is []int{
res1[field.name] = data.$(field.name)
}
}
mut res2 := map[string]SumType{}
$for field in Foo1.fields {
$if field.typ is int {
e := data.$(field.name)
res2[field.name] = e
} $else $if field.typ is []int{
e := data.$(field.name)
res2[field.name] = e
}
}
assert res1 == res2
}
What did you expect to see?
Both test files successful
What did you see instead?
C:\Users\dhrit\Desktop\ToReead\temp\vtest>v test .
---- Testing... --------------------------------------------------------------------------------------------------------
FAIL [1/2] 499.829 ms C:/Users/dhrit/Desktop/ToReead/temp/vtest/code5_test.v
code5_test.v:13:28: error: cannot assign to `res1[field.name]`: expected `SumType`, not `[]int`
11 | $for field in Foo1.fields {
12 | $if field.typ is int {
13 | res1[field.name] = data.$(field.name)
| ~~~~~~~~~~~~~
14 | } $else $if field.typ is []int{
15 | res1[field.name] = data.$(field.name)
code5_test.v:15:28: error: cannot assign to `res1[field.name]`: expected `SumType`, not `[]int`
13 | res1[field.name] = data.$(field.name)
14 | } $else $if field.typ is []int{
15 | res1[field.name] = data.$(field.name)
| ~~~~~~~~~~~~~
16 | }
17 | }
FAIL [2/2] 504.533 ms C:/Users/dhrit/Desktop/ToReead/temp/vtest/code4_test.v
C:\\Users\\dhrit\\Desktop\\ToReead\\temp\\vtest\\code4_test.v:29: ✗ fn test_func
> assert res1 == res2
Left value:
{'a': SumType(120), 'b': SumType([130, 140])}
Right value:
{'a': SumType(120), 'b': SumType(4)}
------------------------------------------------------------------------------------------------------------------------
Failed command 1: "C:\BIN\v\v.exe" -o "C:\Users\dhrit\AppData\Local\Temp\v\test_session_4713100\code5_test.exe" "C:\Users\dhrit\Desktop\ToReead\temp\vtest\code5_test.v"
Failed command 2: "C:\BIN\v\v.exe" -o "C:\Users\dhrit\AppData\Local\Temp\v\test_session_4713100\code4_test.exe" "C:\Users\dhrit\Desktop\ToReead\temp\vtest\code4_test.v"
Summary for all V _test.v files: 2 failed, 2 total. Runtime: 505 ms, on 2 parallel jobs.
V version: V 0.2.4 501b293
OS: windows, Microsoft Windows 10 Home Single Language v19044 64-bit
What did you do?
v test .code5_test.vcode4_test.vWhat did you expect to see?
Both test files successfulWhat did you see instead?