From c8ddf2197a04305e2c9f5794b5fe46fbc85ae905 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sun, 27 Oct 2024 23:45:08 +0800 Subject: [PATCH] builtin, cgen: improve the assert informations (fix #22666) (#22668) --- vlib/builtin/builtin.v | 6 +++++- vlib/v/gen/c/assert.v | 10 +++++----- .../assert_of_sumtype_values_works_test.run.out | 10 ++++++++++ ...rt_of_sumtype_values_works_test.skip_unused.run.out | 10 ++++++++++ .../skip_unused/assert_of_sumtype_values_works_test.vv | 10 ++++++++++ 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.run.out create mode 100644 vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.skip_unused.run.out create mode 100644 vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv diff --git a/vlib/builtin/builtin.v b/vlib/builtin/builtin.v index 9f7a2d307..845036ba5 100644 --- a/vlib/builtin/builtin.v +++ b/vlib/builtin/builtin.v @@ -78,7 +78,11 @@ pub fn (ami &VAssertMetaInfo) free() { fn __print_assert_failure(i &VAssertMetaInfo) { eprintln('${i.fpath}:${i.line_nr + 1}: FAIL: fn ${i.fn_name}: assert ${i.src}') if i.op.len > 0 && i.op != 'call' { - eprintln(' left value: ${i.llabel} = ${i.lvalue}') + if i.llabel == i.lvalue { + eprintln(' left value: ${i.llabel}') + } else { + eprintln(' left value: ${i.llabel} = ${i.lvalue}') + } if i.rlabel == i.rvalue { eprintln(' right value: ${i.rlabel}') } else { diff --git a/vlib/v/gen/c/assert.v b/vlib/v/gen/c/assert.v index 5f0af4906..f31160f46 100644 --- a/vlib/v/gen/c/assert.v +++ b/vlib/v/gen/c/assert.v @@ -179,21 +179,21 @@ fn (mut g Gen) gen_assert_metainfo(node ast.AssertStmt, kind AssertMetainfoKind) fn (mut g Gen) gen_assert_single_expr(expr ast.Expr, typ ast.Type) { // eprintln('> gen_assert_single_expr typ: $typ | expr: $expr | typeof(expr): ${typeof(expr)}') - unknown_value := '*unknown value*' + expr_str := '${expr}' match expr { ast.CastExpr { if typ.is_float() || g.table.final_sym(typ).is_float() { g.gen_expr_to_string(expr.expr, typ) } else { - g.write(ctoslit(unknown_value)) + g.write(ctoslit(expr_str)) } } ast.IfExpr, ast.MatchExpr { - g.write(ctoslit(unknown_value)) + g.write(ctoslit(expr_str)) } ast.IndexExpr { if expr.index is ast.RangeExpr { - g.write(ctoslit(unknown_value)) + g.write(ctoslit(expr_str)) } else { g.gen_expr_to_string(expr, typ) } @@ -203,7 +203,7 @@ fn (mut g Gen) gen_assert_single_expr(expr ast.Expr, typ ast.Type) { // TODO: remove this check; // vlib/builtin/map_test.v (a map of &int, set to &int(0)) fails // without special casing ast.CastExpr here - g.write(ctoslit(unknown_value)) + g.write(ctoslit(expr_str)) } else { g.gen_expr_to_string(expr, typ) } diff --git a/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.run.out b/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.run.out new file mode 100644 index 000000000..a636931a3 --- /dev/null +++ b/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.run.out @@ -0,0 +1,10 @@ +vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv:5: fn test_ab + > assert a == b + Left value (len: 6): `Sum(1)` + Right value (len: 6): `Sum(2)` + +vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv:9: fn test_sumtype_literals + > assert main.Sum(1) == main.Sum(2) + Left value (len: 11): `main.Sum(1)` + Right value (len: 11): `main.Sum(2)` + diff --git a/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.skip_unused.run.out b/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.skip_unused.run.out new file mode 100644 index 000000000..a636931a3 --- /dev/null +++ b/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.skip_unused.run.out @@ -0,0 +1,10 @@ +vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv:5: fn test_ab + > assert a == b + Left value (len: 6): `Sum(1)` + Right value (len: 6): `Sum(2)` + +vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv:9: fn test_sumtype_literals + > assert main.Sum(1) == main.Sum(2) + Left value (len: 11): `main.Sum(1)` + Right value (len: 11): `main.Sum(2)` + diff --git a/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv b/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv new file mode 100644 index 000000000..8173a02e5 --- /dev/null +++ b/vlib/v/tests/skip_unused/assert_of_sumtype_values_works_test.vv @@ -0,0 +1,10 @@ +type Sum = int | string + +fn test_ab() { + a, b := Sum(1), Sum(2) + assert a == b +} + +fn test_sumtype_literals() { + assert Sum(1) == Sum(2) +} -- 2.39.5