xref: /aosp_15_r20/external/llvm-libc/test/src/time/TmMatcher.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
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