Message ID | 20200819194634.68976-1-vitor@massaru.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kunit: fix: kunit_binary_assert_format() only prints signed int | expand |
On Wed, Aug 19, 2020 at 12:46 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > Some tests, such as overflow_kunit(), uses unsigned int, > But kunit_binary_assert_format() only prints signed int, > this commit also deals with the unsigned int print. > > Signed-off-by: Vitor Massaru Iha <vitor@massaru.org> > --- > lib/kunit/assert.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c > index 202f9fdeed0e..3ae90c09986a 100644 > --- a/lib/kunit/assert.c > +++ b/lib/kunit/assert.c > @@ -104,12 +104,23 @@ void kunit_binary_assert_format(const struct kunit_assert *assert, > binary_assert->left_text, > binary_assert->operation, > binary_assert->right_text); > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > + > + if (binary_assert->left_value - 1 < 0) { > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > + binary_assert->left_text, > + binary_assert->left_value); > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > + binary_assert->right_text, > + binary_assert->right_value); > + } > + else { > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu\n", > binary_assert->left_text, > binary_assert->left_value); > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu", > binary_assert->right_text, > binary_assert->right_value); > + } I agree that you found a bug here; however, I disagree that this is the correct fix. Given that the value is stored as a long long; isn't the value always stored as a signed value? So if the value overflows, won't it still not pass the check you have here? > } > kunit_assert_print_msg(assert, stream); > } > > base-commit: d43c7fb05765152d4d4a39a8ef957c4ea14d8847 > prerequisite-patch-id: bf4b0962b0b955e4e45f5d25fece889562118158 > -- > 2.26.2 >
On Wed, Aug 19, 2020 at 6:30 PM Brendan Higgins <brendanhiggins@google.com> wrote: > > On Wed, Aug 19, 2020 at 12:46 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > > > Some tests, such as overflow_kunit(), uses unsigned int, > > But kunit_binary_assert_format() only prints signed int, > > this commit also deals with the unsigned int print. Oops, Thanks! I'll fix it. > > > > Signed-off-by: Vitor Massaru Iha <vitor@massaru.org> > > --- > > lib/kunit/assert.c | 15 +++++++++++++-- > > 1 file changed, 13 insertions(+), 2 deletions(-) > > > > diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c > > index 202f9fdeed0e..3ae90c09986a 100644 > > --- a/lib/kunit/assert.c > > +++ b/lib/kunit/assert.c > > @@ -104,12 +104,23 @@ void kunit_binary_assert_format(const struct kunit_assert *assert, > > binary_assert->left_text, > > binary_assert->operation, > > binary_assert->right_text); > > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > > + > > + if (binary_assert->left_value - 1 < 0) { > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > > + binary_assert->left_text, > > + binary_assert->left_value); > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > > + binary_assert->right_text, > > + binary_assert->right_value); > > + } > > + else { > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu\n", > > binary_assert->left_text, > > binary_assert->left_value); > > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu", > > binary_assert->right_text, > > binary_assert->right_value); > > + } > > I agree that you found a bug here; however, I disagree that this is > the correct fix. Given that the value is stored as a long long; isn't > the value always stored as a signed value? So if the value overflows, > won't it still not pass the check you have here? > > > } > > kunit_assert_print_msg(assert, stream); > > } > > > > base-commit: d43c7fb05765152d4d4a39a8ef957c4ea14d8847 > > prerequisite-patch-id: bf4b0962b0b955e4e45f5d25fece889562118158 > > -- > > 2.26.2 > >
Hi Brendan, Actually https://patchwork.kernel.org/patch/11724995/ solves my problem with unsigned int, since I can customize the Expected message with this patch. I think you can ignore this patch :) On Wed, Aug 19, 2020 at 6:37 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > On Wed, Aug 19, 2020 at 6:30 PM Brendan Higgins > <brendanhiggins@google.com> wrote: > > > > On Wed, Aug 19, 2020 at 12:46 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > > > > > Some tests, such as overflow_kunit(), uses unsigned int, > > > But kunit_binary_assert_format() only prints signed int, > > > this commit also deals with the unsigned int print. > > Oops, Thanks! > I'll fix it. > > > > > > > Signed-off-by: Vitor Massaru Iha <vitor@massaru.org> > > > --- > > > lib/kunit/assert.c | 15 +++++++++++++-- > > > 1 file changed, 13 insertions(+), 2 deletions(-) > > > > > > diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c > > > index 202f9fdeed0e..3ae90c09986a 100644 > > > --- a/lib/kunit/assert.c > > > +++ b/lib/kunit/assert.c > > > @@ -104,12 +104,23 @@ void kunit_binary_assert_format(const struct kunit_assert *assert, > > > binary_assert->left_text, > > > binary_assert->operation, > > > binary_assert->right_text); > > > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > > > + > > > + if (binary_assert->left_value - 1 < 0) { > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > > > + binary_assert->left_text, > > > + binary_assert->left_value); > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > > > + binary_assert->right_text, > > > + binary_assert->right_value); > > > + } > > > + else { > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu\n", > > > binary_assert->left_text, > > > binary_assert->left_value); > > > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu", > > > binary_assert->right_text, > > > binary_assert->right_value); > > > + } > > > > I agree that you found a bug here; however, I disagree that this is > > the correct fix. Given that the value is stored as a long long; isn't > > the value always stored as a signed value? So if the value overflows, > > won't it still not pass the check you have here? > > > > > } > > > kunit_assert_print_msg(assert, stream); > > > } > > > > > > base-commit: d43c7fb05765152d4d4a39a8ef957c4ea14d8847 > > > prerequisite-patch-id: bf4b0962b0b955e4e45f5d25fece889562118158 > > > -- > > > 2.26.2 > > >
On Wed, Aug 19, 2020 at 3:01 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > Hi Brendan, > > Actually https://patchwork.kernel.org/patch/11724995/ > solves my problem with unsigned int, since I can customize > the Expected message with this patch. > > I think you can ignore this patch :) Got it. Sounds good :-) > On Wed, Aug 19, 2020 at 6:37 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > > > On Wed, Aug 19, 2020 at 6:30 PM Brendan Higgins > > <brendanhiggins@google.com> wrote: > > > > > > On Wed, Aug 19, 2020 at 12:46 PM Vitor Massaru Iha <vitor@massaru.org> wrote: > > > > > > > > Some tests, such as overflow_kunit(), uses unsigned int, > > > > But kunit_binary_assert_format() only prints signed int, > > > > this commit also deals with the unsigned int print. > > > > Oops, Thanks! > > I'll fix it. > > > > > > > > > > Signed-off-by: Vitor Massaru Iha <vitor@massaru.org> > > > > --- > > > > lib/kunit/assert.c | 15 +++++++++++++-- > > > > 1 file changed, 13 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c > > > > index 202f9fdeed0e..3ae90c09986a 100644 > > > > --- a/lib/kunit/assert.c > > > > +++ b/lib/kunit/assert.c > > > > @@ -104,12 +104,23 @@ void kunit_binary_assert_format(const struct kunit_assert *assert, > > > > binary_assert->left_text, > > > > binary_assert->operation, > > > > binary_assert->right_text); > > > > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > > > > + > > > > + if (binary_assert->left_value - 1 < 0) { > > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", > > > > + binary_assert->left_text, > > > > + binary_assert->left_value); > > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > > > > + binary_assert->right_text, > > > > + binary_assert->right_value); > > > > + } > > > > + else { > > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu\n", > > > > binary_assert->left_text, > > > > binary_assert->left_value); > > > > - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", > > > > + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu", > > > > binary_assert->right_text, > > > > binary_assert->right_value); > > > > + } > > > > > > I agree that you found a bug here; however, I disagree that this is > > > the correct fix. Given that the value is stored as a long long; isn't > > > the value always stored as a signed value? So if the value overflows, > > > won't it still not pass the check you have here? > > > > > > > } > > > > kunit_assert_print_msg(assert, stream); > > > > } > > > > > > > > base-commit: d43c7fb05765152d4d4a39a8ef957c4ea14d8847 > > > > prerequisite-patch-id: bf4b0962b0b955e4e45f5d25fece889562118158 > > > > -- > > > > 2.26.2 > > > >
diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c index 202f9fdeed0e..3ae90c09986a 100644 --- a/lib/kunit/assert.c +++ b/lib/kunit/assert.c @@ -104,12 +104,23 @@ void kunit_binary_assert_format(const struct kunit_assert *assert, binary_assert->left_text, binary_assert->operation, binary_assert->right_text); - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", + + if (binary_assert->left_value - 1 < 0) { + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld\n", + binary_assert->left_text, + binary_assert->left_value); + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", + binary_assert->right_text, + binary_assert->right_value); + } + else { + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu\n", binary_assert->left_text, binary_assert->left_value); - string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld", + string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %llu", binary_assert->right_text, binary_assert->right_value); + } } kunit_assert_print_msg(assert, stream); }
Some tests, such as overflow_kunit(), uses unsigned int, But kunit_binary_assert_format() only prints signed int, this commit also deals with the unsigned int print. Signed-off-by: Vitor Massaru Iha <vitor@massaru.org> --- lib/kunit/assert.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) base-commit: d43c7fb05765152d4d4a39a8ef957c4ea14d8847 prerequisite-patch-id: bf4b0962b0b955e4e45f5d25fece889562118158