diff options
author | Yuval Peress <peress@google.com> | 2023-11-09 18:46:14 +0000 |
---|---|---|
committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-11-09 18:46:14 +0000 |
commit | 25d2b7fab002019f879dd26e084838fada9b5504 (patch) | |
tree | db7cf6f2033a07570c697a7d4c72c819ad1252cf /pw_unit_test | |
parent | 2825c77b6864445fa49c84ce4d623d8ea6360917 (diff) | |
download | pigweed-25d2b7fab002019f879dd26e084838fada9b5504.tar.gz |
pw_unit_test: Document ASSERT_ and EXPECT_ macros
Add documentation for the ASSERT_ and EXPECT_ macros.
Change-Id: I21544ad8e23716b691d2ecc92f2131e9201a1f10
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179873
Commit-Queue: Taylor Cramer <cramertj@google.com>
Pigweed-Auto-Submit: Yuval Peress <peress@google.com>
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Reviewed-by: Taylor Cramer <cramertj@google.com>
Pigweed-Auto-Submit: Taylor Cramer <cramertj@google.com>
Diffstat (limited to 'pw_unit_test')
-rw-r--r-- | pw_unit_test/docs.rst | 43 | ||||
-rw-r--r-- | pw_unit_test/public/pw_unit_test/internal/framework.h | 121 |
2 files changed, 164 insertions, 0 deletions
diff --git a/pw_unit_test/docs.rst b/pw_unit_test/docs.rst index ee7c1093b..85b54820a 100644 --- a/pw_unit_test/docs.rst +++ b/pw_unit_test/docs.rst @@ -63,6 +63,49 @@ To request a feature addition, please `let us know See `Using upstream GoogleTest`_ below for information about using upstream GoogleTest instead. +API Reference +------------- + +Expectations +```````````` +Expectations perform a check that when fails continues the test's execution +while still marking the test as a failure. They're particularly handy when +verifying multiple dimensions of the same feature so we can see all the errors +at the same time. + +.. doxygendefine:: EXPECT_TRUE +.. doxygendefine:: EXPECT_FALSE +.. doxygendefine:: EXPECT_EQ +.. doxygendefine:: EXPECT_NE +.. doxygendefine:: EXPECT_GT +.. doxygendefine:: EXPECT_GE +.. doxygendefine:: EXPECT_LT +.. doxygendefine:: EXPECT_LE +.. doxygendefine:: EXPECT_NEAR +.. doxygendefine:: EXPECT_FLOAT_EQ +.. doxygendefine:: EXPECT_DOUBLE_EQ +.. doxygendefine:: EXPECT_STREQ +.. doxygendefine:: EXPECT_STRNE + +Assertions +`````````` +Assertions work exactly the same as expectations, but stop the execution of the +test as soon as a failed condition is met. + +.. doxygendefine:: ASSERT_TRUE +.. doxygendefine:: ASSERT_FALSE +.. doxygendefine:: ASSERT_EQ +.. doxygendefine:: ASSERT_NE +.. doxygendefine:: ASSERT_GT +.. doxygendefine:: ASSERT_GE +.. doxygendefine:: ASSERT_LT +.. doxygendefine:: ASSERT_LE +.. doxygendefine:: ASSERT_NEAR +.. doxygendefine:: ASSERT_FLOAT_EQ +.. doxygendefine:: ASSERT_DOUBLE_EQ +.. doxygendefine:: ASSERT_STREQ +.. doxygendefine:: ASSERT_STRNE + The EventHandler interface ========================== The ``EventHandler`` class in ``public/pw_unit_test/event_handler.h`` defines diff --git a/pw_unit_test/public/pw_unit_test/internal/framework.h b/pw_unit_test/public/pw_unit_test/internal/framework.h index 78a59337d..be93c64f8 100644 --- a/pw_unit_test/public/pw_unit_test/internal/framework.h +++ b/pw_unit_test/public/pw_unit_test/internal/framework.h @@ -52,42 +52,163 @@ #define FRIEND_TEST(test_suite_name, test_name) \ friend class test_suite_name##_##test_name##_Test +/// @def EXPECT_TRUE +/// Verifies that @p expr evaluates to true. +/// @param expr Condition to evaluate #define EXPECT_TRUE(expr) _PW_TEST_EXPECT(_PW_TEST_BOOL(expr, true)) + +/// @def EXPECT_FALSE +/// Verifies that @p expr evaluates to false. +/// @param expr Condition to evaluate #define EXPECT_FALSE(expr) _PW_TEST_EXPECT(_PW_TEST_BOOL(expr, false)) + +/// @def EXPECT_EQ +/// Verifies that @p lhs == @p rhs +/// <p> +/// Does pointer equality on pointers. If used on two C strings, it tests if +/// they are in the same memory location, not if they have the same value. Use +/// #EXPECT_STREQ to compare C strings (e.g. <code>const char*</code>) by value. +/// <p> +/// When comparing a pointer to <code>NULL</code> use +/// <code>EXPECT_EQ(ptr, nullptr)</code> instead of +/// <code>EXPECT_EQ(ptr, NULL)</code>. +/// @param lhs The left side of the equality comparison +/// @param rhs The right side of the equality comparison #define EXPECT_EQ(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_OP(lhs, rhs, ==)) + +/// @def EXPECT_NE +/// Verifies that @p lhs != @p rhs +/// <p> +/// Does pointer equality on pointers. If used on two C strings, it tests if +/// they are in different memory locations, not if they have different values. +/// Use #EXPECT_STRNE to compare C strings (e.g. <code>const char*</code>) by +/// value. +/// <p> +/// When comparing a pointer to <code>NULL</code>, use +/// <code>EXPECT_NE(ptr, nullptr)</code> instead of +/// <code>EXPECT_NE(ptr, NULL)</code>. +/// @param lhs The left side of the inequality comparison +/// @param rhs The right side of the inequality comparison #define EXPECT_NE(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_OP(lhs, rhs, !=)) + +/// @def EXPECT_GT +/// Verifies that @p lhs > @p rhs +/// @param lhs The left side of the comparison +/// @param rhs The right side of the comparison #define EXPECT_GT(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_OP(lhs, rhs, >)) + +/// @def EXPECT_GE +/// Verifies that @p lhs >= @p rhs +/// @param lhs The left side of the comparison +/// @param rhs The right side of the comparison #define EXPECT_GE(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_OP(lhs, rhs, >=)) + +/// @def EXPECT_LT +/// Verifies that @p lhs < @p rhs +/// @param lhs The left side of the comparison +/// @param rhs The right side of the comparison #define EXPECT_LT(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_OP(lhs, rhs, <)) + +/// @def EXPECT_LE +/// Verifies that @p lhs <= @p rhs +/// @param lhs The left side of the comparison +/// @param rhs The right side of the comparison #define EXPECT_LE(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_OP(lhs, rhs, <=)) + +/// @def EXPECT_NEAR +/// Verifies that the difference between @p lhs and @p rhs does not exceed the +/// absolute error bound @p epsilon. +/// @param lhs The left side of the comparison +/// @param rhs The right side of the comparison +/// @param epsilon The maximum difference between @p lhs and @p rhs #define EXPECT_NEAR(lhs, rhs, epsilon) \ _PW_TEST_EXPECT(_PW_TEST_NEAR(lhs, rhs, epsilon)) + +/// @def EXPECT_FLOAT_EQ +/// Verifies that the two float values @p rhs and @p lhs are approximately +/// equal, to within 4 ULPs from each other. +/// @param lhs The left side of the equality comparison +/// @param rhs The right side of the equality comparison #define EXPECT_FLOAT_EQ(lhs, rhs) \ _PW_TEST_EXPECT( \ _PW_TEST_NEAR(lhs, rhs, 4 * std::numeric_limits<float>::epsilon())) + +/// @def EXPECT_DOUBLE_EQ +/// Verifies that the two double values @p rhs and @p lhs are approximately +/// equal, to within 4 ULPs from each other. +/// @param lhs The left side of the equality comparison +/// @param rhs The right side of the equality comparison #define EXPECT_DOUBLE_EQ(lhs, rhs) \ _PW_TEST_EXPECT( \ _PW_TEST_NEAR(lhs, rhs, 4 * std::numeric_limits<double>::epsilon())) + +/// @def EXPECT_STREQ +/// Verifies that the two C strings @p lhs and @p rhs have the same contents. +/// @param lhs The left side of the equality comparison +/// @param rhs The right side of the equality comparison #define EXPECT_STREQ(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_C_STR(lhs, rhs, ==)) + +/// @def EXPECT_STRNE +/// Verifies that the two C strings @p lhs and @p rhs have different content +/// @param lhs The left side of the inequality comparison +/// @param rhs The right side of the inequality comparison #define EXPECT_STRNE(lhs, rhs) _PW_TEST_EXPECT(_PW_TEST_C_STR(lhs, rhs, !=)) +/// @def ASSERT_TRUE +/// @see EXPECT_TRUE #define ASSERT_TRUE(expr) _PW_TEST_ASSERT(_PW_TEST_BOOL(expr, true)) + +/// @def ASSERT_FALSE +/// @see EXPECT_FALSE #define ASSERT_FALSE(expr) _PW_TEST_ASSERT(_PW_TEST_BOOL(expr, false)) + +/// @def ASSERT_EQ +/// @see EXPECT_EQ #define ASSERT_EQ(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_OP(lhs, rhs, ==)) + +/// @def ASSERT_NE +/// @see EXPECT_NE #define ASSERT_NE(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_OP(lhs, rhs, !=)) + +/// @def ASSERT_GT +/// @see EXPECT_GT #define ASSERT_GT(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_OP(lhs, rhs, >)) + +/// @def ASSERT_GE +/// @see EXPECT_GE #define ASSERT_GE(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_OP(lhs, rhs, >=)) + +/// @def ASSERT_LT +/// @see EXPECT_LT #define ASSERT_LT(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_OP(lhs, rhs, <)) + +/// @def ASSERT_LE +/// @see EXPECT_LE #define ASSERT_LE(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_OP(lhs, rhs, <=)) + +/// @def ASSERT_NEAR +/// @see EXPECT_NEAR #define ASSERT_NEAR(lhs, rhs, epsilon) \ _PW_TEST_ASSERT(_PW_TEST_NEAR(lhs, rhs, epsilon)) + +/// @def ASSERT_FLOAT_EQ +/// @see EXPECT_FLOAT_EQ #define ASSERT_FLOAT_EQ(lhs, rhs) \ _PW_TEST_ASSERT( \ _PW_TEST_NEAR(lhs, rhs, 4 * std::numeric_limits<float>::epsilon())) + +/// @def ASSERT_DOUBLE_EQ +/// @see EXPECT_DOUBLE_EQ #define ASSERT_DOUBLE_EQ(lhs, rhs) \ _PW_TEST_ASSERT( \ _PW_TEST_NEAR(lhs, rhs, 4 * std::numeric_limits<double>::epsilon())) + +/// @def ASSERT_STREQ +/// @see EXPECT_STREQ #define ASSERT_STREQ(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_C_STR(lhs, rhs, ==)) + +/// @def ASSERT_STRNE +/// @see EXPECT_STRNE #define ASSERT_STRNE(lhs, rhs) _PW_TEST_ASSERT(_PW_TEST_C_STR(lhs, rhs, !=)) // Generates a non-fatal failure with a generic message. |