File indexing completed on 2025-10-12 04:59:55
0001 // bjgb_rank.t.cpp -*-C++-*- 0002 #include <bjgb_rank.h> 0003 0004 #include <cstdlib> 0005 #include <iostream> 0006 #include <sstream> 0007 0008 // ============================================================================ 0009 // STANDARD ASSERT TEST FUNCTION 0010 // ---------------------------------------------------------------------------- 0011 0012 namespace { 0013 0014 int testStatus = 0; 0015 0016 void aSsErT(bool condition, const char *message, int line) 0017 { 0018 if (condition) { 0019 std::cout << "Error " __FILE__ "(" << line << "): " << message << " (failed)" << std::endl; 0020 0021 if (0 <= testStatus && testStatus <= 100) { 0022 ++testStatus; 0023 } 0024 } 0025 } 0026 0027 } // namespace 0028 0029 // ============================================================================ 0030 // STANDARD TEST DRIVER MACROS 0031 // ---------------------------------------------------------------------------- 0032 0033 #define ASSERT(X) aSsErT(!(X), #X, __LINE__); 0034 0035 // ============================================================================ 0036 // MAIN PROGRAM 0037 // ---------------------------------------------------------------------------- 0038 0039 int main(int argc, char *argv[]) 0040 { 0041 const int test = argc > 1 ? std::atoi(argv[1]) : 0; 0042 const bool verbose = argc > 2; 0043 const bool veryVerbose = argc > 3; 0044 const bool veryVeryVerbose = argc > 4; 0045 const bool veryVeryVeryVerbose = argc > 5; 0046 0047 std::cout << "TEST " << __FILE__ << " CASE " << test << std::endl; 0048 0049 switch (test) { 0050 case 0: 0051 case 1: { 0052 // -------------------------------------------------------------------- 0053 // BREATHING TEST 0054 // 0055 // Concerns: 0056 //: 1 TBD 0057 // 0058 // Plan: 0059 //: 1 TBD 0060 // 0061 // Testing: 0062 // BREATHING TEST 0063 // -------------------------------------------------------------------- 0064 0065 if (verbose) 0066 std::cout << std::endl << "BREATHING TEST" << std::endl << "==============" << std::endl; 0067 0068 using namespace bjgb::RankLiterals; 0069 0070 // derived from Usage in header file 0071 { 0072 const char *EXP = "A 2 3 4 5 6 7 8 9 T"; 0073 0074 std::ostringstream os; 0075 0076 for (bjgb::Rank r = A_R; r != bjgb::Rank::end(); ++r) { 0077 if (r != A_R) { 0078 os << ' '; 0079 } 0080 os << r; 0081 } 0082 0083 ASSERT(EXP == os.str()); 0084 } 0085 0086 // exercise full compliment of literals 0087 { 0088 ASSERT(1 == (1_R).value()); 0089 ASSERT(2 == (2_R).value()); 0090 ASSERT(3 == (3_R).value()); 0091 ASSERT(4 == (4_R).value()); 0092 ASSERT(5 == (5_R).value()); 0093 ASSERT(6 == (6_R).value()); 0094 ASSERT(7 == (7_R).value()); 0095 ASSERT(8 == (8_R).value()); 0096 ASSERT(9 == (9_R).value()); 0097 ASSERT(10 == (10_R).value()); 0098 0099 ASSERT(A_R == 1_R); 0100 ASSERT(T_R == 10_R); 0101 0102 ASSERT(!(1_R == 2_R)); 0103 ASSERT(1_R != 2_R); 0104 ASSERT(1_R < 2_R); 0105 0106 ASSERT(!(2_R == 1_R)); 0107 ASSERT(2_R != 1_R); 0108 ASSERT(!(2_R < 1_R)); 0109 0110 ASSERT(10_R < bjgb::Rank::end()); 0111 ASSERT(++(10_R) == bjgb::Rank::end()); 0112 } 0113 0114 // copy 0115 { 0116 bjgb::Rank r7 = 7_R; 0117 bjgb::Rank r7c(r7); 0118 0119 ASSERT(r7 == r7c); 0120 0121 constexpr bjgb::Rank r8 = 8_R; 0122 0123 r7 = r8; 0124 0125 ASSERT(r7 == r8); 0126 ASSERT(r7 != r7c); 0127 } 0128 0129 } break; 0130 default: { 0131 std::cerr << "WARNING: CASE `" << test << "' NOT FOUND." << std::endl; 0132 testStatus = -1; 0133 } 0134 } 0135 0136 if (testStatus > 0) { 0137 std::cerr << "Error, non-zero test status = " << testStatus << "." << std::endl; 0138 } 0139 0140 return testStatus; 0141 }