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 }