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 }