📄 ccxx_tests.cpp
字号:
#include <cppunit/extensions/TestFactoryRegistry.h>#include <cppunit/CompilerOutputter.h>#include <cppunit/ui/text/TestRunner.h>#include <string>#include <iomanip>//#include "SHATumblerTest.h"//CPPUNIT_TEST_SUITE_REGISTRATION(SHATumblerTest);using namespace std;#define ULONG unsigned longULONG crc32_table[256]; // Lookup table array// Reflection is a requirement for the official CRC-32 standard.// You can create CRCs without it, but they won't conform to the standard.ULONG Reflect(ULONG ref, char ch){// Used only by Init_CRC32_Table() ULONG value(0); // Swap bit 0 for bit 7 // bit 1 for bit 6, etc. for(int i = 1; i < (ch + 1); i++) { if(ref & 1) value |= 1 << (ch - i); ref >>= 1; } return value;}// Call this function only once to initialize the CRC table.void Init_CRC32_Table(){// Called by OnInitDialog() // This is the official polynomial used by CRC-32 // in PKZip, WinZip and Ethernet. ULONG ulPolynomial = 0x04c11db7; // 256 values representing ASCII character codes. for(int i = 0; i <= 0xFF; i++) { crc32_table[i]=Reflect(i, 8) << 24; for (int j = 0; j < 8; j++) crc32_table[i] = (crc32_table[i] << 1) ^ (crc32_table[i] & (1 << 31) ? ulPolynomial : 0); crc32_table[i] = Reflect(crc32_table[i], 32); //cout << i << ":" << crc32_table[i] << endl; }}// Once the lookup table has been filled in by the two functions above,// this function creates all CRCs using only the lookup table.int Get_CRC(string &text){// Called by OnChangeText() // Be sure to use unsigned variables, // because negative values introduce high bits // where zero bits are required. // Start out with all bits set high. ULONG ulCRC(0xffffffff); int len; unsigned char* buffer; // Get the length. // Note that if the text contains NULL characters // processing ends at the first NULL and the CRC value is invalid. // See the 32 Bit File Demonstration source code // for a method of dealing with NULL characters in files. len = text.length(); // Save the text in the buffer. buffer = (unsigned char*)text.c_str(); // Perform the algorithm on each character // in the string, using the lookup table values. while(len--) ulCRC = (ulCRC >> 8) ^ crc32_table[(ulCRC & 0xFF) ^ *buffer++]; // Exclusive OR the result with the beginning value. return ulCRC ^ 0xffffffff;}int main(int argc, char * argv[]){ // if command line contains "-selftest" then this is the post build check // => the output must be in the compiler error format. bool selfTest = (argc > 1) && (std::string("-selftest") == argv[1]); // new CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(); CppUnit::TextUi::TestRunner runner; runner.addTest(registry.makeTest()); if(selfTest) { // Change the default outputter to a compiler error format outputter // The test runner owns the new outputter. runner.setOutputter( CppUnit::CompilerOutputter::defaultOutputter(&runner.result(), std::cerr) ); } bool wasSucessful = runner.run("", false); //Init_CRC32_Table(); //cout << hex << setw(8) << Get_CRC(string("pippo")); return !wasSucessful; // inverted as 0 is success 1 is failure}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -