16b229e59SBrendan Higgins /* SPDX-License-Identifier: GPL-2.0 */ 26b229e59SBrendan Higgins /* 36b229e59SBrendan Higgins * Assertion and expectation serialization API. 46b229e59SBrendan Higgins * 56b229e59SBrendan Higgins * Copyright (C) 2019, Google LLC. 66b229e59SBrendan Higgins * Author: Brendan Higgins <brendanhiggins@google.com> 76b229e59SBrendan Higgins */ 86b229e59SBrendan Higgins 96b229e59SBrendan Higgins #ifndef _KUNIT_ASSERT_H 106b229e59SBrendan Higgins #define _KUNIT_ASSERT_H 116b229e59SBrendan Higgins 126b229e59SBrendan Higgins #include <linux/err.h> 13*109fb06fSAlan Maguire #include <linux/kernel.h> 146b229e59SBrendan Higgins 156b229e59SBrendan Higgins struct kunit; 16*109fb06fSAlan Maguire struct string_stream; 176b229e59SBrendan Higgins 186b229e59SBrendan Higgins /** 196b229e59SBrendan Higgins * enum kunit_assert_type - Type of expectation/assertion. 206b229e59SBrendan Higgins * @KUNIT_ASSERTION: Used to denote that a kunit_assert represents an assertion. 216b229e59SBrendan Higgins * @KUNIT_EXPECTATION: Denotes that a kunit_assert represents an expectation. 226b229e59SBrendan Higgins * 236b229e59SBrendan Higgins * Used in conjunction with a &struct kunit_assert to denote whether it 246b229e59SBrendan Higgins * represents an expectation or an assertion. 256b229e59SBrendan Higgins */ 266b229e59SBrendan Higgins enum kunit_assert_type { 276b229e59SBrendan Higgins KUNIT_ASSERTION, 286b229e59SBrendan Higgins KUNIT_EXPECTATION, 296b229e59SBrendan Higgins }; 306b229e59SBrendan Higgins 316b229e59SBrendan Higgins /** 326b229e59SBrendan Higgins * struct kunit_assert - Data for printing a failed assertion or expectation. 336b229e59SBrendan Higgins * @test: the test case this expectation/assertion is associated with. 346b229e59SBrendan Higgins * @type: the type (either an expectation or an assertion) of this kunit_assert. 356b229e59SBrendan Higgins * @line: the source code line number that the expectation/assertion is at. 366b229e59SBrendan Higgins * @file: the file path of the source file that the expectation/assertion is in. 376b229e59SBrendan Higgins * @message: an optional message to provide additional context. 386b229e59SBrendan Higgins * @format: a function which formats the data in this kunit_assert to a string. 396b229e59SBrendan Higgins * 406b229e59SBrendan Higgins * Represents a failed expectation/assertion. Contains all the data necessary to 416b229e59SBrendan Higgins * format a string to a user reporting the failure. 426b229e59SBrendan Higgins */ 436b229e59SBrendan Higgins struct kunit_assert { 446b229e59SBrendan Higgins struct kunit *test; 456b229e59SBrendan Higgins enum kunit_assert_type type; 466b229e59SBrendan Higgins int line; 476b229e59SBrendan Higgins const char *file; 486b229e59SBrendan Higgins struct va_format message; 496b229e59SBrendan Higgins void (*format)(const struct kunit_assert *assert, 506b229e59SBrendan Higgins struct string_stream *stream); 516b229e59SBrendan Higgins }; 526b229e59SBrendan Higgins 536b229e59SBrendan Higgins /** 546b229e59SBrendan Higgins * KUNIT_INIT_VA_FMT_NULL - Default initializer for struct va_format. 556b229e59SBrendan Higgins * 566b229e59SBrendan Higgins * Used inside a struct initialization block to initialize struct va_format to 576b229e59SBrendan Higgins * default values where fmt and va are null. 586b229e59SBrendan Higgins */ 596b229e59SBrendan Higgins #define KUNIT_INIT_VA_FMT_NULL { .fmt = NULL, .va = NULL } 606b229e59SBrendan Higgins 616b229e59SBrendan Higgins /** 626b229e59SBrendan Higgins * KUNIT_INIT_ASSERT_STRUCT() - Initializer for a &struct kunit_assert. 636b229e59SBrendan Higgins * @kunit: The test case that this expectation/assertion is associated with. 646b229e59SBrendan Higgins * @assert_type: The type (assertion or expectation) of this kunit_assert. 656b229e59SBrendan Higgins * @fmt: The formatting function which builds a string out of this kunit_assert. 666b229e59SBrendan Higgins * 676b229e59SBrendan Higgins * The base initializer for a &struct kunit_assert. 686b229e59SBrendan Higgins */ 696b229e59SBrendan Higgins #define KUNIT_INIT_ASSERT_STRUCT(kunit, assert_type, fmt) { \ 706b229e59SBrendan Higgins .test = kunit, \ 716b229e59SBrendan Higgins .type = assert_type, \ 726b229e59SBrendan Higgins .file = __FILE__, \ 736b229e59SBrendan Higgins .line = __LINE__, \ 746b229e59SBrendan Higgins .message = KUNIT_INIT_VA_FMT_NULL, \ 756b229e59SBrendan Higgins .format = fmt \ 766b229e59SBrendan Higgins } 776b229e59SBrendan Higgins 786b229e59SBrendan Higgins void kunit_base_assert_format(const struct kunit_assert *assert, 796b229e59SBrendan Higgins struct string_stream *stream); 806b229e59SBrendan Higgins 816b229e59SBrendan Higgins void kunit_assert_print_msg(const struct kunit_assert *assert, 826b229e59SBrendan Higgins struct string_stream *stream); 836b229e59SBrendan Higgins 846b229e59SBrendan Higgins /** 856b229e59SBrendan Higgins * struct kunit_fail_assert - Represents a plain fail expectation/assertion. 866b229e59SBrendan Higgins * @assert: The parent of this type. 876b229e59SBrendan Higgins * 886b229e59SBrendan Higgins * Represents a simple KUNIT_FAIL/KUNIT_ASSERT_FAILURE that always fails. 896b229e59SBrendan Higgins */ 906b229e59SBrendan Higgins struct kunit_fail_assert { 916b229e59SBrendan Higgins struct kunit_assert assert; 926b229e59SBrendan Higgins }; 936b229e59SBrendan Higgins 946b229e59SBrendan Higgins void kunit_fail_assert_format(const struct kunit_assert *assert, 956b229e59SBrendan Higgins struct string_stream *stream); 966b229e59SBrendan Higgins 976b229e59SBrendan Higgins /** 986b229e59SBrendan Higgins * KUNIT_INIT_FAIL_ASSERT_STRUCT() - Initializer for &struct kunit_fail_assert. 996b229e59SBrendan Higgins * @test: The test case that this expectation/assertion is associated with. 1006b229e59SBrendan Higgins * @type: The type (assertion or expectation) of this kunit_assert. 1016b229e59SBrendan Higgins * 1026b229e59SBrendan Higgins * Initializes a &struct kunit_fail_assert. Intended to be used in 1036b229e59SBrendan Higgins * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros. 1046b229e59SBrendan Higgins */ 1056b229e59SBrendan Higgins #define KUNIT_INIT_FAIL_ASSERT_STRUCT(test, type) { \ 1066b229e59SBrendan Higgins .assert = KUNIT_INIT_ASSERT_STRUCT(test, \ 1076b229e59SBrendan Higgins type, \ 1086b229e59SBrendan Higgins kunit_fail_assert_format) \ 1096b229e59SBrendan Higgins } 1106b229e59SBrendan Higgins 1116b229e59SBrendan Higgins /** 1126b229e59SBrendan Higgins * struct kunit_unary_assert - Represents a KUNIT_{EXPECT|ASSERT}_{TRUE|FALSE} 1136b229e59SBrendan Higgins * @assert: The parent of this type. 1146b229e59SBrendan Higgins * @condition: A string representation of a conditional expression. 1156b229e59SBrendan Higgins * @expected_true: True if of type KUNIT_{EXPECT|ASSERT}_TRUE, false otherwise. 1166b229e59SBrendan Higgins * 1176b229e59SBrendan Higgins * Represents a simple expectation or assertion that simply asserts something is 1186b229e59SBrendan Higgins * true or false. In other words, represents the expectations: 1196b229e59SBrendan Higgins * KUNIT_{EXPECT|ASSERT}_{TRUE|FALSE} 1206b229e59SBrendan Higgins */ 1216b229e59SBrendan Higgins struct kunit_unary_assert { 1226b229e59SBrendan Higgins struct kunit_assert assert; 1236b229e59SBrendan Higgins const char *condition; 1246b229e59SBrendan Higgins bool expected_true; 1256b229e59SBrendan Higgins }; 1266b229e59SBrendan Higgins 1276b229e59SBrendan Higgins void kunit_unary_assert_format(const struct kunit_assert *assert, 1286b229e59SBrendan Higgins struct string_stream *stream); 1296b229e59SBrendan Higgins 1306b229e59SBrendan Higgins /** 1316b229e59SBrendan Higgins * KUNIT_INIT_UNARY_ASSERT_STRUCT() - Initializes &struct kunit_unary_assert. 1326b229e59SBrendan Higgins * @test: The test case that this expectation/assertion is associated with. 1336b229e59SBrendan Higgins * @type: The type (assertion or expectation) of this kunit_assert. 1346b229e59SBrendan Higgins * @cond: A string representation of the expression asserted true or false. 1356b229e59SBrendan Higgins * @expect_true: True if of type KUNIT_{EXPECT|ASSERT}_TRUE, false otherwise. 1366b229e59SBrendan Higgins * 1376b229e59SBrendan Higgins * Initializes a &struct kunit_unary_assert. Intended to be used in 1386b229e59SBrendan Higgins * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros. 1396b229e59SBrendan Higgins */ 1406b229e59SBrendan Higgins #define KUNIT_INIT_UNARY_ASSERT_STRUCT(test, type, cond, expect_true) { \ 1416b229e59SBrendan Higgins .assert = KUNIT_INIT_ASSERT_STRUCT(test, \ 1426b229e59SBrendan Higgins type, \ 1436b229e59SBrendan Higgins kunit_unary_assert_format), \ 1446b229e59SBrendan Higgins .condition = cond, \ 1456b229e59SBrendan Higgins .expected_true = expect_true \ 1466b229e59SBrendan Higgins } 1476b229e59SBrendan Higgins 1486b229e59SBrendan Higgins /** 1496b229e59SBrendan Higgins * struct kunit_ptr_not_err_assert - An expectation/assertion that a pointer is 1506b229e59SBrendan Higgins * not NULL and not a -errno. 1516b229e59SBrendan Higgins * @assert: The parent of this type. 1526b229e59SBrendan Higgins * @text: A string representation of the expression passed to the expectation. 1536b229e59SBrendan Higgins * @value: The actual evaluated pointer value of the expression. 1546b229e59SBrendan Higgins * 1556b229e59SBrendan Higgins * Represents an expectation/assertion that a pointer is not null and is does 1566b229e59SBrendan Higgins * not contain a -errno. (See IS_ERR_OR_NULL().) 1576b229e59SBrendan Higgins */ 1586b229e59SBrendan Higgins struct kunit_ptr_not_err_assert { 1596b229e59SBrendan Higgins struct kunit_assert assert; 1606b229e59SBrendan Higgins const char *text; 1616b229e59SBrendan Higgins const void *value; 1626b229e59SBrendan Higgins }; 1636b229e59SBrendan Higgins 1646b229e59SBrendan Higgins void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert, 1656b229e59SBrendan Higgins struct string_stream *stream); 1666b229e59SBrendan Higgins 1676b229e59SBrendan Higgins /** 1686b229e59SBrendan Higgins * KUNIT_INIT_PTR_NOT_ERR_ASSERT_STRUCT() - Initializes a 1696b229e59SBrendan Higgins * &struct kunit_ptr_not_err_assert. 1706b229e59SBrendan Higgins * @test: The test case that this expectation/assertion is associated with. 1716b229e59SBrendan Higgins * @type: The type (assertion or expectation) of this kunit_assert. 1726b229e59SBrendan Higgins * @txt: A string representation of the expression passed to the expectation. 1736b229e59SBrendan Higgins * @val: The actual evaluated pointer value of the expression. 1746b229e59SBrendan Higgins * 1756b229e59SBrendan Higgins * Initializes a &struct kunit_ptr_not_err_assert. Intended to be used in 1766b229e59SBrendan Higgins * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros. 1776b229e59SBrendan Higgins */ 1786b229e59SBrendan Higgins #define KUNIT_INIT_PTR_NOT_ERR_STRUCT(test, type, txt, val) { \ 1796b229e59SBrendan Higgins .assert = KUNIT_INIT_ASSERT_STRUCT(test, \ 1806b229e59SBrendan Higgins type, \ 1816b229e59SBrendan Higgins kunit_ptr_not_err_assert_format), \ 1826b229e59SBrendan Higgins .text = txt, \ 1836b229e59SBrendan Higgins .value = val \ 1846b229e59SBrendan Higgins } 1856b229e59SBrendan Higgins 1866b229e59SBrendan Higgins /** 1876b229e59SBrendan Higgins * struct kunit_binary_assert - An expectation/assertion that compares two 1886b229e59SBrendan Higgins * non-pointer values (for example, KUNIT_EXPECT_EQ(test, 1 + 1, 2)). 1896b229e59SBrendan Higgins * @assert: The parent of this type. 1906b229e59SBrendan Higgins * @operation: A string representation of the comparison operator (e.g. "=="). 1916b229e59SBrendan Higgins * @left_text: A string representation of the expression in the left slot. 1926b229e59SBrendan Higgins * @left_value: The actual evaluated value of the expression in the left slot. 1936b229e59SBrendan Higgins * @right_text: A string representation of the expression in the right slot. 1946b229e59SBrendan Higgins * @right_value: The actual evaluated value of the expression in the right slot. 1956b229e59SBrendan Higgins * 1966b229e59SBrendan Higgins * Represents an expectation/assertion that compares two non-pointer values. For 1976b229e59SBrendan Higgins * example, to expect that 1 + 1 == 2, you can use the expectation 1986b229e59SBrendan Higgins * KUNIT_EXPECT_EQ(test, 1 + 1, 2); 1996b229e59SBrendan Higgins */ 2006b229e59SBrendan Higgins struct kunit_binary_assert { 2016b229e59SBrendan Higgins struct kunit_assert assert; 2026b229e59SBrendan Higgins const char *operation; 2036b229e59SBrendan Higgins const char *left_text; 2046b229e59SBrendan Higgins long long left_value; 2056b229e59SBrendan Higgins const char *right_text; 2066b229e59SBrendan Higgins long long right_value; 2076b229e59SBrendan Higgins }; 2086b229e59SBrendan Higgins 2096b229e59SBrendan Higgins void kunit_binary_assert_format(const struct kunit_assert *assert, 2106b229e59SBrendan Higgins struct string_stream *stream); 2116b229e59SBrendan Higgins 2126b229e59SBrendan Higgins /** 2136b229e59SBrendan Higgins * KUNIT_INIT_BINARY_ASSERT_STRUCT() - Initializes a 2146b229e59SBrendan Higgins * &struct kunit_binary_assert. 2156b229e59SBrendan Higgins * @test: The test case that this expectation/assertion is associated with. 2166b229e59SBrendan Higgins * @type: The type (assertion or expectation) of this kunit_assert. 2176b229e59SBrendan Higgins * @op_str: A string representation of the comparison operator (e.g. "=="). 2186b229e59SBrendan Higgins * @left_str: A string representation of the expression in the left slot. 2196b229e59SBrendan Higgins * @left_val: The actual evaluated value of the expression in the left slot. 2206b229e59SBrendan Higgins * @right_str: A string representation of the expression in the right slot. 2216b229e59SBrendan Higgins * @right_val: The actual evaluated value of the expression in the right slot. 2226b229e59SBrendan Higgins * 2236b229e59SBrendan Higgins * Initializes a &struct kunit_binary_assert. Intended to be used in 2246b229e59SBrendan Higgins * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros. 2256b229e59SBrendan Higgins */ 2266b229e59SBrendan Higgins #define KUNIT_INIT_BINARY_ASSERT_STRUCT(test, \ 2276b229e59SBrendan Higgins type, \ 2286b229e59SBrendan Higgins op_str, \ 2296b229e59SBrendan Higgins left_str, \ 2306b229e59SBrendan Higgins left_val, \ 2316b229e59SBrendan Higgins right_str, \ 2326b229e59SBrendan Higgins right_val) { \ 2336b229e59SBrendan Higgins .assert = KUNIT_INIT_ASSERT_STRUCT(test, \ 2346b229e59SBrendan Higgins type, \ 2356b229e59SBrendan Higgins kunit_binary_assert_format), \ 2366b229e59SBrendan Higgins .operation = op_str, \ 2376b229e59SBrendan Higgins .left_text = left_str, \ 2386b229e59SBrendan Higgins .left_value = left_val, \ 2396b229e59SBrendan Higgins .right_text = right_str, \ 2406b229e59SBrendan Higgins .right_value = right_val \ 2416b229e59SBrendan Higgins } 2426b229e59SBrendan Higgins 2436b229e59SBrendan Higgins /** 2446b229e59SBrendan Higgins * struct kunit_binary_ptr_assert - An expectation/assertion that compares two 2456b229e59SBrendan Higgins * pointer values (for example, KUNIT_EXPECT_PTR_EQ(test, foo, bar)). 2466b229e59SBrendan Higgins * @assert: The parent of this type. 2476b229e59SBrendan Higgins * @operation: A string representation of the comparison operator (e.g. "=="). 2486b229e59SBrendan Higgins * @left_text: A string representation of the expression in the left slot. 2496b229e59SBrendan Higgins * @left_value: The actual evaluated value of the expression in the left slot. 2506b229e59SBrendan Higgins * @right_text: A string representation of the expression in the right slot. 2516b229e59SBrendan Higgins * @right_value: The actual evaluated value of the expression in the right slot. 2526b229e59SBrendan Higgins * 2536b229e59SBrendan Higgins * Represents an expectation/assertion that compares two pointer values. For 2546b229e59SBrendan Higgins * example, to expect that foo and bar point to the same thing, you can use the 2556b229e59SBrendan Higgins * expectation KUNIT_EXPECT_PTR_EQ(test, foo, bar); 2566b229e59SBrendan Higgins */ 2576b229e59SBrendan Higgins struct kunit_binary_ptr_assert { 2586b229e59SBrendan Higgins struct kunit_assert assert; 2596b229e59SBrendan Higgins const char *operation; 2606b229e59SBrendan Higgins const char *left_text; 2616b229e59SBrendan Higgins const void *left_value; 2626b229e59SBrendan Higgins const char *right_text; 2636b229e59SBrendan Higgins const void *right_value; 2646b229e59SBrendan Higgins }; 2656b229e59SBrendan Higgins 2666b229e59SBrendan Higgins void kunit_binary_ptr_assert_format(const struct kunit_assert *assert, 2676b229e59SBrendan Higgins struct string_stream *stream); 2686b229e59SBrendan Higgins 2696b229e59SBrendan Higgins /** 2706b229e59SBrendan Higgins * KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT() - Initializes a 2716b229e59SBrendan Higgins * &struct kunit_binary_ptr_assert. 2726b229e59SBrendan Higgins * @test: The test case that this expectation/assertion is associated with. 2736b229e59SBrendan Higgins * @type: The type (assertion or expectation) of this kunit_assert. 2746b229e59SBrendan Higgins * @op_str: A string representation of the comparison operator (e.g. "=="). 2756b229e59SBrendan Higgins * @left_str: A string representation of the expression in the left slot. 2766b229e59SBrendan Higgins * @left_val: The actual evaluated value of the expression in the left slot. 2776b229e59SBrendan Higgins * @right_str: A string representation of the expression in the right slot. 2786b229e59SBrendan Higgins * @right_val: The actual evaluated value of the expression in the right slot. 2796b229e59SBrendan Higgins * 2806b229e59SBrendan Higgins * Initializes a &struct kunit_binary_ptr_assert. Intended to be used in 2816b229e59SBrendan Higgins * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros. 2826b229e59SBrendan Higgins */ 2836b229e59SBrendan Higgins #define KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT(test, \ 2846b229e59SBrendan Higgins type, \ 2856b229e59SBrendan Higgins op_str, \ 2866b229e59SBrendan Higgins left_str, \ 2876b229e59SBrendan Higgins left_val, \ 2886b229e59SBrendan Higgins right_str, \ 2896b229e59SBrendan Higgins right_val) { \ 2906b229e59SBrendan Higgins .assert = KUNIT_INIT_ASSERT_STRUCT(test, \ 2916b229e59SBrendan Higgins type, \ 2926b229e59SBrendan Higgins kunit_binary_ptr_assert_format), \ 2936b229e59SBrendan Higgins .operation = op_str, \ 2946b229e59SBrendan Higgins .left_text = left_str, \ 2956b229e59SBrendan Higgins .left_value = left_val, \ 2966b229e59SBrendan Higgins .right_text = right_str, \ 2976b229e59SBrendan Higgins .right_value = right_val \ 2986b229e59SBrendan Higgins } 2996b229e59SBrendan Higgins 3006b229e59SBrendan Higgins /** 3016b229e59SBrendan Higgins * struct kunit_binary_str_assert - An expectation/assertion that compares two 3026b229e59SBrendan Higgins * string values (for example, KUNIT_EXPECT_STREQ(test, foo, "bar")). 3036b229e59SBrendan Higgins * @assert: The parent of this type. 3046b229e59SBrendan Higgins * @operation: A string representation of the comparison operator (e.g. "=="). 3056b229e59SBrendan Higgins * @left_text: A string representation of the expression in the left slot. 3066b229e59SBrendan Higgins * @left_value: The actual evaluated value of the expression in the left slot. 3076b229e59SBrendan Higgins * @right_text: A string representation of the expression in the right slot. 3086b229e59SBrendan Higgins * @right_value: The actual evaluated value of the expression in the right slot. 3096b229e59SBrendan Higgins * 3106b229e59SBrendan Higgins * Represents an expectation/assertion that compares two string values. For 3116b229e59SBrendan Higgins * example, to expect that the string in foo is equal to "bar", you can use the 3126b229e59SBrendan Higgins * expectation KUNIT_EXPECT_STREQ(test, foo, "bar"); 3136b229e59SBrendan Higgins */ 3146b229e59SBrendan Higgins struct kunit_binary_str_assert { 3156b229e59SBrendan Higgins struct kunit_assert assert; 3166b229e59SBrendan Higgins const char *operation; 3176b229e59SBrendan Higgins const char *left_text; 3186b229e59SBrendan Higgins const char *left_value; 3196b229e59SBrendan Higgins const char *right_text; 3206b229e59SBrendan Higgins const char *right_value; 3216b229e59SBrendan Higgins }; 3226b229e59SBrendan Higgins 3236b229e59SBrendan Higgins void kunit_binary_str_assert_format(const struct kunit_assert *assert, 3246b229e59SBrendan Higgins struct string_stream *stream); 3256b229e59SBrendan Higgins 3266b229e59SBrendan Higgins /** 3276b229e59SBrendan Higgins * KUNIT_INIT_BINARY_STR_ASSERT_STRUCT() - Initializes a 3286b229e59SBrendan Higgins * &struct kunit_binary_str_assert. 3296b229e59SBrendan Higgins * @test: The test case that this expectation/assertion is associated with. 3306b229e59SBrendan Higgins * @type: The type (assertion or expectation) of this kunit_assert. 3316b229e59SBrendan Higgins * @op_str: A string representation of the comparison operator (e.g. "=="). 3326b229e59SBrendan Higgins * @left_str: A string representation of the expression in the left slot. 3336b229e59SBrendan Higgins * @left_val: The actual evaluated value of the expression in the left slot. 3346b229e59SBrendan Higgins * @right_str: A string representation of the expression in the right slot. 3356b229e59SBrendan Higgins * @right_val: The actual evaluated value of the expression in the right slot. 3366b229e59SBrendan Higgins * 3376b229e59SBrendan Higgins * Initializes a &struct kunit_binary_str_assert. Intended to be used in 3386b229e59SBrendan Higgins * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros. 3396b229e59SBrendan Higgins */ 3406b229e59SBrendan Higgins #define KUNIT_INIT_BINARY_STR_ASSERT_STRUCT(test, \ 3416b229e59SBrendan Higgins type, \ 3426b229e59SBrendan Higgins op_str, \ 3436b229e59SBrendan Higgins left_str, \ 3446b229e59SBrendan Higgins left_val, \ 3456b229e59SBrendan Higgins right_str, \ 3466b229e59SBrendan Higgins right_val) { \ 3476b229e59SBrendan Higgins .assert = KUNIT_INIT_ASSERT_STRUCT(test, \ 3486b229e59SBrendan Higgins type, \ 3496b229e59SBrendan Higgins kunit_binary_str_assert_format), \ 3506b229e59SBrendan Higgins .operation = op_str, \ 3516b229e59SBrendan Higgins .left_text = left_str, \ 3526b229e59SBrendan Higgins .left_value = left_val, \ 3536b229e59SBrendan Higgins .right_text = right_str, \ 3546b229e59SBrendan Higgins .right_value = right_val \ 3556b229e59SBrendan Higgins } 3566b229e59SBrendan Higgins 3576b229e59SBrendan Higgins #endif /* _KUNIT_ASSERT_H */ 358