Caffe2 - C++ API
A deep learning, cross platform ML framework
logging_test.cpp
1 #include <algorithm>
2 
3 #include <gtest/gtest.h>
4 #include <c10/util/Logging.h>
5 
6 namespace c10_test {
7 
8 using std::set;
9 using std::string;
10 using std::vector;
11 
12 TEST(LoggingTest, TestEnforceTrue) {
13  // This should just work.
14  CAFFE_ENFORCE(true, "Isn't it?");
15 }
16 
17 TEST(LoggingTest, TestEnforceFalse) {
18  bool kFalse = false;
19  std::swap(FLAGS_caffe2_use_fatal_for_enforce, kFalse);
20  try {
21  CAFFE_ENFORCE(false, "This throws.");
22  // This should never be triggered.
23  ADD_FAILURE();
24  } catch (const ::c10::Error&) {
25  }
26  std::swap(FLAGS_caffe2_use_fatal_for_enforce, kFalse);
27 }
28 
29 TEST(LoggingTest, TestEnforceEquals) {
30  int x = 4;
31  int y = 5;
32  try {
33  CAFFE_ENFORCE_THAT(Equals(++x, ++y));
34  // This should never be triggered.
35  ADD_FAILURE();
36  } catch (const ::c10::Error& err) {
37  EXPECT_NE(err.msg().find("5 vs 6"), string::npos);
38  }
39 
40  // arguments are expanded only once
41  CAFFE_ENFORCE_THAT(Equals(++x, y));
42  EXPECT_EQ(x, 6);
43  EXPECT_EQ(y, 6);
44 }
45 
46 TEST(LoggingTest, EnforceShowcase) {
47  // It's not really a test but rather a convenient thing that you can run and
48  // see all messages
49  int one = 1;
50  int two = 2;
51  int three = 3;
52 #define WRAP_AND_PRINT(exp) \
53  try { \
54  exp; \
55  } catch (const ::c10::Error&) { \
56  /* ::c10::Error already does LOG(ERROR) */ \
57  }
58  WRAP_AND_PRINT(CAFFE_ENFORCE_EQ(one, two));
59  WRAP_AND_PRINT(CAFFE_ENFORCE_NE(one * 2, two));
60  WRAP_AND_PRINT(CAFFE_ENFORCE_GT(one, two));
61  WRAP_AND_PRINT(CAFFE_ENFORCE_GE(one, two));
62  WRAP_AND_PRINT(CAFFE_ENFORCE_LT(three, two));
63  WRAP_AND_PRINT(CAFFE_ENFORCE_LE(three, two));
64 
65  WRAP_AND_PRINT(CAFFE_ENFORCE_EQ(
66  one * two + three, three * two, "It's a pretty complicated expression"));
67 
68  WRAP_AND_PRINT(CAFFE_ENFORCE_THAT(Equals(one * two + three, three * two)));
69 }
70 
71 TEST(LoggingTest, Join) {
72  auto s = c10::Join(", ", vector<int>({1, 2, 3}));
73  EXPECT_EQ(s, "1, 2, 3");
74  s = c10::Join(":", vector<string>());
75  EXPECT_EQ(s, "");
76  s = c10::Join(", ", set<int>({3, 1, 2}));
77  EXPECT_EQ(s, "1, 2, 3");
78 }
79 
80 #if GTEST_HAS_DEATH_TEST
81 TEST(LoggingDeathTest, TestEnforceUsingFatal) {
82  bool kTrue = true;
83  std::swap(FLAGS_caffe2_use_fatal_for_enforce, kTrue);
84  EXPECT_DEATH(CAFFE_ENFORCE(false, "This goes fatal."), "");
85  std::swap(FLAGS_caffe2_use_fatal_for_enforce, kTrue);
86 }
87 #endif
88 
89 } // namespace c10_test