1*71db0c75SAndroid Build Coastguard Worker //===---- TmMatchers.h ------------------------------------------*- C++ -*-===// 2*71db0c75SAndroid Build Coastguard Worker // 3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*71db0c75SAndroid Build Coastguard Worker // 7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*71db0c75SAndroid Build Coastguard Worker 9*71db0c75SAndroid Build Coastguard Worker #ifndef LLVM_LIBC_TEST_SRC_TIME_TM_MATCHER_H 10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_TEST_SRC_TIME_TM_MATCHER_H 11*71db0c75SAndroid Build Coastguard Worker 12*71db0c75SAndroid Build Coastguard Worker #include <time.h> 13*71db0c75SAndroid Build Coastguard Worker 14*71db0c75SAndroid Build Coastguard Worker #include "src/__support/macros/config.h" 15*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h" 16*71db0c75SAndroid Build Coastguard Worker 17*71db0c75SAndroid Build Coastguard Worker namespace LIBC_NAMESPACE_DECL { 18*71db0c75SAndroid Build Coastguard Worker namespace testing { 19*71db0c75SAndroid Build Coastguard Worker 20*71db0c75SAndroid Build Coastguard Worker class StructTmMatcher : public Matcher<::tm> { 21*71db0c75SAndroid Build Coastguard Worker ::tm expected; 22*71db0c75SAndroid Build Coastguard Worker ::tm actual; 23*71db0c75SAndroid Build Coastguard Worker 24*71db0c75SAndroid Build Coastguard Worker public: StructTmMatcher(::tm expectedValue)25*71db0c75SAndroid Build Coastguard Worker StructTmMatcher(::tm expectedValue) : expected(expectedValue) {} 26*71db0c75SAndroid Build Coastguard Worker match(::tm actualValue)27*71db0c75SAndroid Build Coastguard Worker bool match(::tm actualValue) { 28*71db0c75SAndroid Build Coastguard Worker actual = actualValue; 29*71db0c75SAndroid Build Coastguard Worker return (actual.tm_sec == expected.tm_sec || 30*71db0c75SAndroid Build Coastguard Worker actual.tm_min == expected.tm_min || 31*71db0c75SAndroid Build Coastguard Worker actual.tm_hour == expected.tm_hour || 32*71db0c75SAndroid Build Coastguard Worker actual.tm_mday == expected.tm_mday || 33*71db0c75SAndroid Build Coastguard Worker actual.tm_mon == expected.tm_mon || 34*71db0c75SAndroid Build Coastguard Worker actual.tm_year == expected.tm_year || 35*71db0c75SAndroid Build Coastguard Worker actual.tm_wday == expected.tm_wday || 36*71db0c75SAndroid Build Coastguard Worker actual.tm_yday == expected.tm_yday || 37*71db0c75SAndroid Build Coastguard Worker actual.tm_isdst == expected.tm_isdst); 38*71db0c75SAndroid Build Coastguard Worker } 39*71db0c75SAndroid Build Coastguard Worker describeValue(const char * label,::tm value)40*71db0c75SAndroid Build Coastguard Worker void describeValue(const char *label, ::tm value) { 41*71db0c75SAndroid Build Coastguard Worker tlog << label; 42*71db0c75SAndroid Build Coastguard Worker tlog << " sec: " << value.tm_sec; 43*71db0c75SAndroid Build Coastguard Worker tlog << " min: " << value.tm_min; 44*71db0c75SAndroid Build Coastguard Worker tlog << " hour: " << value.tm_hour; 45*71db0c75SAndroid Build Coastguard Worker tlog << " mday: " << value.tm_mday; 46*71db0c75SAndroid Build Coastguard Worker tlog << " mon: " << value.tm_mon; 47*71db0c75SAndroid Build Coastguard Worker tlog << " year: " << value.tm_year; 48*71db0c75SAndroid Build Coastguard Worker tlog << " wday: " << value.tm_wday; 49*71db0c75SAndroid Build Coastguard Worker tlog << " yday: " << value.tm_yday; 50*71db0c75SAndroid Build Coastguard Worker tlog << " isdst: " << value.tm_isdst; 51*71db0c75SAndroid Build Coastguard Worker tlog << '\n'; 52*71db0c75SAndroid Build Coastguard Worker } 53*71db0c75SAndroid Build Coastguard Worker explainError()54*71db0c75SAndroid Build Coastguard Worker void explainError() override { 55*71db0c75SAndroid Build Coastguard Worker describeValue("Expected tm_struct value: ", expected); 56*71db0c75SAndroid Build Coastguard Worker describeValue(" Actual tm_struct value: ", actual); 57*71db0c75SAndroid Build Coastguard Worker } 58*71db0c75SAndroid Build Coastguard Worker }; 59*71db0c75SAndroid Build Coastguard Worker 60*71db0c75SAndroid Build Coastguard Worker } // namespace testing 61*71db0c75SAndroid Build Coastguard Worker } // namespace LIBC_NAMESPACE_DECL 62*71db0c75SAndroid Build Coastguard Worker 63*71db0c75SAndroid Build Coastguard Worker #define EXPECT_TM_EQ(expected, actual) \ 64*71db0c75SAndroid Build Coastguard Worker EXPECT_THAT((actual), LIBC_NAMESPACE::testing::StructTmMatcher((expected))) 65*71db0c75SAndroid Build Coastguard Worker 66*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_TEST_SRC_TIME_TM_MATCHER_H 67