File indexing completed on 2025-10-12 04:59:55

0001 // bjgb_shoe.t.cpp                                                    -*-C++-*-
0002 #include <bjgb_shoe.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         // default construct
0071         {
0072             bjgb::Shoe mX;
0073             const bjgb::Shoe& X = mX;
0074 
0075             ASSERT(312 == X.numCardsTotal()); // 6 decks
0076 
0077             bjgb::Rank r = A_R;
0078 
0079             while (r < T_R) {
0080                 ASSERT(24 == X.numCards(r)); // 24 each of A, 2, ..., 9
0081 
0082                 ++r;
0083             }
0084 
0085             ASSERT(96 == X.numCards(r)); // 4 times as many tens
0086         }
0087 
0088         // 'setNumCardsOfRank'
0089         {
0090             bjgb::Shoe mX(4);
0091             const bjgb::Shoe& X = mX;
0092 
0093             ASSERT(208 == X.numCardsTotal()); // 4 decks
0094 
0095             bjgb::Rank r = A_R;
0096 
0097             while (r < T_R) {
0098                 ASSERT(16 == X.numCards(r)); // 16 each of A, 2, ..., 9
0099 
0100                 ++r;
0101             }
0102 
0103             ASSERT(64 == X.numCards(r)); // 4 times as many tens
0104 
0105             const bjgb::Shoe Y; // 6 decks
0106 
0107             ASSERT(X != Y);
0108 
0109             r = A_R;
0110 
0111             while (r < T_R) {
0112                 mX.setNumCardsOfRank(r, 24);
0113 
0114                 ++r;
0115             }
0116             ASSERT(X != Y);
0117 
0118             mX.setNumCardsOfRank(r, 96);
0119             ASSERT(X == Y);
0120         }
0121 
0122         // 'setNumCardsOfEachRank'
0123         {
0124             const int counts[] = {2, 4, 6, 8, 10, 20, 24, 26, 28, 30};
0125 
0126             const bjgb::Shoe X(counts);
0127 
0128             int ix = 0;
0129 
0130             for (bjgb::Rank r = A_R; r != bjgb::Rank::end(); ++r) {
0131                 ASSERT(counts[ix] == X.numCards(r));
0132                 ++ix;
0133             }
0134 
0135             bjgb::Shoe mY(8);
0136             const bjgb::Shoe& Y = mY;
0137 
0138             ASSERT(X != Y);
0139 
0140             mY.setNumCardsOfEachRank(counts);
0141 
0142             ASSERT(X == Y);
0143         }
0144 
0145     } break;
0146     default: {
0147         std::cerr << "WARNING: CASE `" << test << "' NOT FOUND." << std::endl;
0148         testStatus = -1;
0149     }
0150     }
0151 
0152     if (testStatus > 0) {
0153         std::cerr << "Error, non-zero test status = " << testStatus << "." << std::endl;
0154     }
0155 
0156     return testStatus;
0157 }