📄 datatest_8cpp-source.html
字号:
<a name="l00456"></a>00456 cout << endl;<a name="l00457"></a>00457 }<a name="l00458"></a>00458 <a name="l00459"></a>00459 <span class="keywordtype">void</span> OutputNameValuePairs(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &v)<a name="l00460"></a>00460 {<a name="l00461"></a>00461 std::string names = v.<a class="code" href="class_name_value_pairs.html#13faea827ee047cd58557282806ed2e1" title="get a list of value names that can be retrieved">GetValueNames</a>();<a name="l00462"></a>00462 string::size_type i = 0;<a name="l00463"></a>00463 <span class="keywordflow">while</span> (i < names.size())<a name="l00464"></a>00464 {<a name="l00465"></a>00465 string::size_type j = names.find_first_of (<span class="charliteral">';'</span>, i);<a name="l00466"></a>00466 <a name="l00467"></a>00467 <span class="keywordflow">if</span> (j == string::npos)<a name="l00468"></a>00468 <span class="keywordflow">return</span>;<a name="l00469"></a>00469 <span class="keywordflow">else</span><a name="l00470"></a>00470 {<a name="l00471"></a>00471 std::string name = names.substr(i, j-i);<a name="l00472"></a>00472 <span class="keywordflow">if</span> (name.find(<span class="charliteral">':'</span>) == string::npos)<a name="l00473"></a>00473 OutputPair(v, name.c_str());<a name="l00474"></a>00474 }<a name="l00475"></a>00475 <a name="l00476"></a>00476 i = j + 1;<a name="l00477"></a>00477 }<a name="l00478"></a>00478 }<a name="l00479"></a>00479 <a name="l00480"></a>00480 <span class="keywordtype">void</span> TestDataFile(<span class="keyword">const</span> std::string &filename, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &totalTests, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &failedTests)<a name="l00481"></a>00481 {<a name="l00482"></a>00482 std::ifstream file(filename.c_str());<a name="l00483"></a>00483 <span class="keywordflow">if</span> (!file.good())<a name="l00484"></a>00484 <span class="keywordflow">throw</span> <a class="code" href="class_exception.html" title="base class for all exceptions thrown by Crypto++">Exception</a>(<a class="code" href="class_exception.html#8e53909d979479380e0274807c074c0a27d9ee7704100a88e4ae4adcc4072015" title="some error not belong to any of the above categories">Exception::OTHER_ERROR</a>, <span class="stringliteral">"Can not open file "</span> + filename + <span class="stringliteral">" for reading"</span>);<a name="l00485"></a>00485 TestData v;<a name="l00486"></a>00486 s_currentTestData = &v;<a name="l00487"></a>00487 std::string name, value, lastAlgName;<a name="l00488"></a>00488 <a name="l00489"></a>00489 <span class="keywordflow">while</span> (file)<a name="l00490"></a>00490 {<a name="l00491"></a>00491 <span class="keywordflow">while</span> (file.peek() == <span class="charliteral">'#'</span>)<a name="l00492"></a>00492 file.ignore(INT_MAX, <span class="charliteral">'\n'</span>);<a name="l00493"></a>00493 <a name="l00494"></a>00494 <span class="keywordflow">if</span> (file.peek() == <span class="charliteral">'\n'</span>)<a name="l00495"></a>00495 v.clear();<a name="l00496"></a>00496 <a name="l00497"></a>00497 <span class="keywordflow">if</span> (!GetField(file, name, value))<a name="l00498"></a>00498 <span class="keywordflow">break</span>;<a name="l00499"></a>00499 v[name] = value;<a name="l00500"></a>00500 <a name="l00501"></a>00501 <span class="keywordflow">if</span> (name == <span class="stringliteral">"Test"</span>)<a name="l00502"></a>00502 {<a name="l00503"></a>00503 <span class="keywordtype">bool</span> failed = <span class="keyword">true</span>;<a name="l00504"></a>00504 std::string algType = GetRequiredDatum(v, <span class="stringliteral">"AlgorithmType"</span>);<a name="l00505"></a>00505 <a name="l00506"></a>00506 <span class="keywordflow">if</span> (lastAlgName != GetRequiredDatum(v, <span class="stringliteral">"Name"</span>))<a name="l00507"></a>00507 {<a name="l00508"></a>00508 lastAlgName = GetRequiredDatum(v, <span class="stringliteral">"Name"</span>);<a name="l00509"></a>00509 cout << <span class="stringliteral">"\nTesting "</span> << algType.c_str() << <span class="stringliteral">" algorithm "</span> << lastAlgName.c_str() << <span class="stringliteral">".\n"</span>;<a name="l00510"></a>00510 }<a name="l00511"></a>00511 <a name="l00512"></a>00512 <span class="keywordflow">try</span><a name="l00513"></a>00513 {<a name="l00514"></a>00514 <span class="keywordflow">if</span> (algType == <span class="stringliteral">"Signature"</span>)<a name="l00515"></a>00515 TestSignatureScheme(v);<a name="l00516"></a>00516 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (algType == <span class="stringliteral">"SymmetricCipher"</span>)<a name="l00517"></a>00517 TestSymmetricCipher(v);<a name="l00518"></a>00518 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (algType == <span class="stringliteral">"AsymmetricCipher"</span>)<a name="l00519"></a>00519 TestAsymmetricCipher(v);<a name="l00520"></a>00520 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (algType == <span class="stringliteral">"MessageDigest"</span>)<a name="l00521"></a>00521 TestDigestOrMAC(v, <span class="keyword">true</span>);<a name="l00522"></a>00522 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (algType == <span class="stringliteral">"MAC"</span>)<a name="l00523"></a>00523 TestDigestOrMAC(v, <span class="keyword">false</span>);<a name="l00524"></a>00524 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (algType == <span class="stringliteral">"FileList"</span>)<a name="l00525"></a>00525 TestDataFile(GetRequiredDatum(v, <span class="stringliteral">"Test"</span>), totalTests, failedTests);<a name="l00526"></a>00526 <span class="keywordflow">else</span><a name="l00527"></a>00527 SignalTestError();<a name="l00528"></a>00528 failed = <span class="keyword">false</span>;<a name="l00529"></a>00529 }<a name="l00530"></a>00530 <span class="keywordflow">catch</span> (<a class="code" href="class_test_failure.html">TestFailure</a> &)<a name="l00531"></a>00531 {<a name="l00532"></a>00532 cout << <span class="stringliteral">"\nTest failed.\n"</span>;<a name="l00533"></a>00533 }<a name="l00534"></a>00534 <span class="keywordflow">catch</span> (CryptoPP::Exception &e)<a name="l00535"></a>00535 {<a name="l00536"></a>00536 cout << <span class="stringliteral">"\nCryptoPP::Exception caught: "</span> << e.what() << endl;<a name="l00537"></a>00537 }<a name="l00538"></a>00538 <span class="keywordflow">catch</span> (std::exception &e)<a name="l00539"></a>00539 {<a name="l00540"></a>00540 cout << <span class="stringliteral">"\nstd::exception caught: "</span> << e.what() << endl;<a name="l00541"></a>00541 }<a name="l00542"></a>00542 <a name="l00543"></a>00543 <span class="keywordflow">if</span> (failed)<a name="l00544"></a>00544 {<a name="l00545"></a>00545 cout << <span class="stringliteral">"Skipping to next test.\n"</span>;<a name="l00546"></a>00546 failedTests++;<a name="l00547"></a>00547 }<a name="l00548"></a>00548 <span class="keywordflow">else</span><a name="l00549"></a>00549 cout << <span class="stringliteral">"."</span> << flush;<a name="l00550"></a>00550 <a name="l00551"></a>00551 totalTests++;<a name="l00552"></a>00552 }<a name="l00553"></a>00553 }<a name="l00554"></a>00554 }<a name="l00555"></a>00555 <a name="l00556"></a>00556 <span class="keywordtype">bool</span> RunTestDataFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)<a name="l00557"></a>00557 {<a name="l00558"></a>00558 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalTests = 0, failedTests = 0;<a name="l00559"></a>00559 TestDataFile(filename, totalTests, failedTests);<a name="l00560"></a>00560 cout << <span class="stringliteral">"\nTests complete. Total tests = "</span> << totalTests << <span class="stringliteral">". Failed tests = "</span> << failedTests << <span class="stringliteral">".\n"</span>;<a name="l00561"></a>00561 <span class="keywordflow">if</span> (failedTests != 0)<a name="l00562"></a>00562 cout << <span class="stringliteral">"SOME TESTS FAILED!\n"</span>;<a name="l00563"></a>00563 <span class="keywordflow">return</span> failedTests == 0;<a name="l00564"></a>00564 }</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:20 2007 for Crypto++ by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -