lkml.org 
[lkml]   [2020]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[RFC v1 09/12] kunit: mock: add macro machinery to pick correct format args
    From
    From: Marcelo Schmitt <marcelo.schmitt1@gmail.com>

    Note: It was unclear if there was existing code that could be reused.

    This is used by DEFINE_MATCHER to generate matching funcs for primitive
    types that don't trigger compiler warnings.

    After preprocessing, we now generate matcher func code like
    kunit_stream_add(stream, "%p not > "%p", actual, matcher->expected)
    as opposed to the hoping %d will work for all types.

    Signed-off-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
    Signed-off-by: Daniel Latypov <dlatypov@google.com>
    ---
    lib/kunit/common-mocks.c | 25 +++++++++++++++++++++++--
    1 file changed, 23 insertions(+), 2 deletions(-)

    diff --git a/lib/kunit/common-mocks.c b/lib/kunit/common-mocks.c
    index b3a410fda63a..1f755f26cf5f 100644
    --- a/lib/kunit/common-mocks.c
    +++ b/lib/kunit/common-mocks.c
    @@ -42,6 +42,27 @@ struct mock_param_matcher *kunit_any(struct kunit *test)
    matcher); \
    }

    +#define TYPE_FRMT(type_name) FORMAT_##type_name
    +#define FORMAT_u8 "%hu"
    +#define FORMAT_u16 "%hu"
    +#define FORMAT_u32 "%u"
    +#define FORMAT_u64 "%llu"
    +#define FORMAT_char "%c"
    +#define FORMAT_uchar "%c"
    +#define FORMAT_schar "%c"
    +#define FORMAT_short "%hd"
    +#define FORMAT_ushort "%hu"
    +#define FORMAT_int "%d"
    +#define FORMAT_uint "%u"
    +#define FORMAT_long "%ld"
    +#define FORMAT_ulong "%lu"
    +#define FORMAT_longlong "%lld"
    +#define FORMAT_ulonglong "%llu"
    +#define FORMAT_ptr "%p"
    +
    +#define CMP_FORMAT(type_name, msg, op) \
    + TYPE_FRMT(type_name) msg " " #op " " TYPE_FRMT(type_name)
    +
    #define DEFINE_MATCH_FUNC(type_name, type, op_name, op) \
    bool match_##type_name##_##op_name( \
    struct mock_param_matcher *pmatcher, \
    @@ -55,12 +76,12 @@ struct mock_param_matcher *kunit_any(struct kunit *test)
    \
    if (matches) \
    kunit_stream_add(stream, \
    - "%d "#op" %d", \
    + CMP_FORMAT(type_name, "", op),\
    actual, \
    matcher->expected); \
    else \
    kunit_stream_add(stream, \
    - "%d not "#op" %d", \
    + CMP_FORMAT(type_name, " not", op), \
    actual, \
    matcher->expected); \
    \
    --
    2.28.0.681.g6f77f65b4e-goog
    \
     
     \ /
      Last update: 2020-09-18 20:33    [W:2.478 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site