⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datatest_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00456"></a>00456         cout &lt;&lt; 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> &amp;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 &lt; 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 &amp;filename, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;totalTests, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;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 = &amp;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 &lt;&lt; <span class="stringliteral">"\nTesting "</span> &lt;&lt; algType.c_str() &lt;&lt; <span class="stringliteral">" algorithm "</span> &lt;&lt; lastAlgName.c_str() &lt;&lt; <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> &amp;)<a name="l00531"></a>00531                         {<a name="l00532"></a>00532                                 cout &lt;&lt; <span class="stringliteral">"\nTest failed.\n"</span>;<a name="l00533"></a>00533                         }<a name="l00534"></a>00534                         <span class="keywordflow">catch</span> (CryptoPP::Exception &amp;e)<a name="l00535"></a>00535                         {<a name="l00536"></a>00536                                 cout &lt;&lt; <span class="stringliteral">"\nCryptoPP::Exception caught: "</span> &lt;&lt; e.what() &lt;&lt; endl;<a name="l00537"></a>00537                         }<a name="l00538"></a>00538                         <span class="keywordflow">catch</span> (std::exception &amp;e)<a name="l00539"></a>00539                         {<a name="l00540"></a>00540                                 cout &lt;&lt; <span class="stringliteral">"\nstd::exception caught: "</span> &lt;&lt; e.what() &lt;&lt; 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 &lt;&lt; <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 &lt;&lt; <span class="stringliteral">"."</span> &lt;&lt; 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 &lt;&lt; <span class="stringliteral">"\nTests complete. Total tests = "</span> &lt;&lt; totalTests &lt;&lt; <span class="stringliteral">". Failed tests = "</span> &lt;&lt; failedTests &lt;&lt; <span class="stringliteral">".\n"</span>;<a name="l00561"></a>00561         <span class="keywordflow">if</span> (failedTests != 0)<a name="l00562"></a>00562                 cout &lt;&lt; <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&nbsp;<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 + -