File indexing completed on 2025-10-12 04:59:55
0001 // bjgb_state.t.cpp -*-C++-*- 0002 #include <bjgb_state.h> 0003 0004 #include <cstdlib> 0005 #include <cstring> 0006 #include <iostream> 0007 #include <sstream> 0008 0009 // ============================================================================ 0010 // STANDARD ASSERT TEST FUNCTION 0011 // ---------------------------------------------------------------------------- 0012 0013 namespace { 0014 0015 int testStatus = 0; 0016 0017 void aSsErT(bool condition, const char *message, int line) 0018 { 0019 if (condition) { 0020 std::cout << "Error " __FILE__ "(" << line << "): " << message << " (failed)" << std::endl; 0021 0022 if (0 <= testStatus && testStatus <= 100) { 0023 ++testStatus; 0024 } 0025 } 0026 } 0027 0028 } // namespace 0029 0030 // ============================================================================ 0031 // STANDARD TEST DRIVER MACROS 0032 // ---------------------------------------------------------------------------- 0033 0034 #define ASSERT(X) aSsErT(!(X), #X, __LINE__); 0035 0036 // ============================================================================ 0037 // GLOBAL TYPEDEFS FOR TESTING 0038 // ---------------------------------------------------------------------------- 0039 0040 typedef bjgb::State::Enum Enum; 0041 typedef bjgb::State Util; 0042 0043 // ============================================================================ 0044 // MAIN PROGRAM 0045 // ---------------------------------------------------------------------------- 0046 0047 int main(int argc, char *argv[]) 0048 { 0049 const int test = argc > 1 ? std::atoi(argv[1]) : 0; 0050 const bool verbose = argc > 2; 0051 const bool veryVerbose = argc > 3; 0052 const bool veryVeryVerbose = argc > 4; 0053 const bool veryVeryVeryVerbose = argc > 5; 0054 0055 std::cout << "TEST " << __FILE__ << " CASE " << test << std::endl; 0056 0057 switch (test) { 0058 case 0: 0059 case 1: { 0060 // -------------------------------------------------------------------- 0061 // BREATHING TEST 0062 // 0063 // Concerns: 0064 //: 1 TBD 0065 // 0066 // Plan: 0067 //: 1 TBD 0068 // 0069 // Testing: 0070 // BREATHING TEST 0071 // -------------------------------------------------------------------- 0072 0073 if (verbose) 0074 std::cout << std::endl << "BREATHING TEST" << std::endl << "==============" << std::endl; 0075 0076 // starting from 0, the enumerators are sequential in value 0077 { 0078 int value = 0; 0079 0080 ASSERT(value++ == Util::e_S01); 0081 ASSERT(value++ == Util::e_S02); 0082 ASSERT(value++ == Util::e_S03); 0083 ASSERT(value++ == Util::e_S04); 0084 ASSERT(value++ == Util::e_S05); 0085 ASSERT(value++ == Util::e_S06); 0086 ASSERT(value++ == Util::e_S07); 0087 ASSERT(value++ == Util::e_S08); 0088 ASSERT(value++ == Util::e_S09); 0089 ASSERT(value++ == Util::e_S10); 0090 ASSERT(value++ == Util::e_S11); 0091 ASSERT(value++ == Util::e_SBJ); 0092 ASSERT(value++ == Util::e_HZR); 0093 ASSERT(value++ == Util::e_S_A); 0094 ASSERT(value++ == Util::e_H_2); 0095 ASSERT(value++ == Util::e_H_3); 0096 ASSERT(value++ == Util::e_H_4); 0097 ASSERT(value++ == Util::e_H_5); 0098 ASSERT(value++ == Util::e_H_6); 0099 ASSERT(value++ == Util::e_H_7); 0100 ASSERT(value++ == Util::e_H_8); 0101 ASSERT(value++ == Util::e_H_9); 0102 ASSERT(value++ == Util::e_H_T); 0103 ASSERT(value++ == Util::e_H02); 0104 ASSERT(value++ == Util::e_H03); 0105 ASSERT(value++ == Util::e_H04); 0106 ASSERT(value++ == Util::e_H05); 0107 ASSERT(value++ == Util::e_H06); 0108 ASSERT(value++ == Util::e_H07); 0109 ASSERT(value++ == Util::e_H08); 0110 ASSERT(value++ == Util::e_H09); 0111 ASSERT(value++ == Util::e_H10); 0112 ASSERT(value++ == Util::e_H11); 0113 ASSERT(value++ == Util::e_H12); 0114 ASSERT(value++ == Util::e_H13); 0115 ASSERT(value++ == Util::e_H14); 0116 ASSERT(value++ == Util::e_H15); 0117 ASSERT(value++ == Util::e_H16); 0118 ASSERT(value++ == Util::e_H17); 0119 ASSERT(value++ == Util::e_H18); 0120 ASSERT(value++ == Util::e_H19); 0121 ASSERT(value++ == Util::e_H20); 0122 ASSERT(value++ == Util::e_H21); 0123 ASSERT(value++ == Util::e_HOV); 0124 ASSERT(value++ == Util::e_PAA); 0125 ASSERT(value++ == Util::e_P22); 0126 ASSERT(value++ == Util::e_P33); 0127 ASSERT(value++ == Util::e_P44); 0128 ASSERT(value++ == Util::e_P55); 0129 ASSERT(value++ == Util::e_P66); 0130 ASSERT(value++ == Util::e_P77); 0131 ASSERT(value++ == Util::e_P88); 0132 ASSERT(value++ == Util::e_P99); 0133 ASSERT(value++ == Util::e_PTT); 0134 0135 ASSERT(value == Util::k_NUM_STATES); 0136 } 0137 0138 // sanity check limits of 'hard', 'soft', 'pair', 'unus' 0139 { 0140 ASSERT(Util::e_H02 == Util::hard(2)); 0141 ASSERT(Util::e_H21 == Util::hard(21)); 0142 0143 ASSERT(Util::e_S01 == Util::soft(1)); 0144 ASSERT(Util::e_S11 == Util::soft(11)); 0145 0146 ASSERT(Util::e_PAA == Util::pair(1)); 0147 ASSERT(Util::e_PTT == Util::pair(10)); 0148 0149 ASSERT(Util::e_S_A == Util::unus(1)); 0150 ASSERT(Util::e_H_T == Util::unus(10)); 0151 } 0152 0153 // values returned by 'stateId2String' are unique 0154 { 0155 for (int i = 0; i < Util::k_NUM_STATES; ++i) { 0156 for (int j = 0; j < Util::k_NUM_STATES; ++j) { 0157 const bool isSame = 0 == std::strcmp(Util::stateId2String(i), Util::stateId2String(j)); 0158 ASSERT((i == j) == isSame); 0159 } 0160 } 0161 } 0162 0163 } break; 0164 default: { 0165 std::cerr << "WARNING: CASE `" << test << "' NOT FOUND." << std::endl; 0166 testStatus = -1; 0167 } 0168 } 0169 0170 if (testStatus > 0) { 0171 std::cerr << "Error, non-zero test status = " << testStatus << "." << std::endl; 0172 } 0173 0174 return testStatus; 0175 }