File indexing completed on 2026-04-09 07:49:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 #include <cassert>
0053 #include <vector>
0054 #include <string>
0055 #include <iostream>
0056 #include <iomanip>
0057
0058 #include "sdigest.h"
0059 #include "ssys.h"
0060 #include "sstr.h"
0061
0062
0063 struct sdigest_test
0064 {
0065 static int compare(const char* label, const std::vector<std::string>& dig, const char* known=nullptr );
0066 static int hello();
0067 static int int_();
0068 static int Desc();
0069 static int Hit();
0070
0071 static int main();
0072
0073 };
0074
0075 int sdigest_test::compare(const char* label, const std::vector<std::string>& dig, const char* known )
0076 {
0077 std::cout << "sdigest_test::compare " << label << "\n" ;
0078 int rc = 0 ;
0079 for(unsigned i=0 ; i < dig.size() ; i++)
0080 {
0081 std::cout
0082 << " i " << std::setw(3) << i
0083 << " : " << dig[i]
0084 << std::endl
0085 ;
0086
0087 bool match_0i = strcmp( dig[0].c_str(), dig[i].c_str() ) == 0 ;
0088 bool match_ki = known ? strcmp(known, dig[i].c_str()) == 0 : true ;
0089
0090 if(!match_0i) rc += 1 ;
0091 if(!match_ki) rc += 1 ;
0092 }
0093 return rc ;
0094 }
0095
0096
0097 int sdigest_test::hello()
0098 {
0099 char dat[6] ;
0100 dat[0] = 'h' ;
0101 dat[1] = 'e' ;
0102 dat[2] = 'l' ;
0103 dat[3] = 'l' ;
0104 dat[4] = 'o' ;
0105 dat[5] = '\0' ;
0106
0107 const char* m = "hello" ;
0108 const char* hello_digest = "5d41402abc4b2a76b9719d911017c592" ;
0109
0110 std::string msg = "hello" ;
0111
0112 std::stringstream ss ;
0113 #ifdef __APPLE__
0114 ss << "md5 -q -s " << m ;
0115 #else
0116 ss << "echo " << hello_digest ;
0117
0118 #endif
0119 std::string cmd = ss.str();
0120
0121 std::vector<std::string> dig(10) ;
0122
0123 dig[0] = sdigest::Buf( dat, 5 );
0124 dig[1] = sdigest::Buf( m , strlen(m) );
0125 dig[2] = sdigest::Buf( msg.c_str(), strlen(msg.c_str()) );
0126 dig[3] = ssys::popen( cmd.c_str() );
0127
0128
0129 sdigest u0, u1, u2, u3, u4 ;
0130
0131 u0.add(m);
0132 u1.add(msg);
0133 u2.add(dat, 5);
0134 for(int i=0 ; i < 5 ; i++) u3.add(dat+i, 1 );
0135
0136 u4.add_<char>(dat, 5 );
0137
0138
0139 dig[4] = u0.finalize();
0140 dig[5] = u1.finalize();
0141 dig[6] = u2.finalize();
0142 dig[7] = u3.finalize();
0143 dig[8] = u4.finalize();
0144
0145
0146 const char* path = "/tmp/hello.txt" ;
0147 sstr::Write(path, m );
0148 dig[9] = sdigest::Path(path) ;
0149
0150 return compare("hello", dig, hello_digest );
0151 }
0152
0153 int sdigest_test::int_()
0154 {
0155 sdigest u0 ;
0156 u0.add(0);
0157 u0.add(1);
0158 u0.add(2);
0159 u0.add(3);
0160
0161 std::vector<int> ii = {{ 0,1,2,3 }} ;
0162 sdigest u1 ;
0163 u1.add( (char*)ii.data(), sizeof(int)*ii.size() );
0164
0165
0166 std::vector<std::string> dig(2) ;
0167 dig[0] = u0.finalize() ;
0168 dig[1] = u1.finalize() ;
0169
0170 return compare("int_", dig);
0171 }
0172
0173 int sdigest_test::Desc()
0174 {
0175 std::cout << "sdigest::Desc() " << sdigest::Desc() << std::endl ;
0176 return 0 ;
0177 }
0178
0179 int sdigest_test::Hit()
0180 {
0181 NP* hit = NP::Load("$HITFOLD/hit.npy");
0182 std::cout << " hit " << ( hit ? hit->sstr() : "-" ) << "\n" ;
0183 if(hit == nullptr) return 0;
0184
0185 for(int i=0 ; i < 10 ; i++)
0186 {
0187 std::string dig = sdigest::Item(hit, i );
0188 std::cout << std::setw(6) << i << " : " << dig << "\n" ;
0189 }
0190
0191 return 0 ;
0192 }
0193
0194
0195
0196 int sdigest_test::main()
0197 {
0198 const char* TEST = ssys::getenvvar("TEST", "ALL");
0199 bool ALL = strcmp(TEST, "ALL") == 0 ;
0200
0201 int rc = 0 ;
0202 if(ALL||strcmp(TEST, "hello")==0) rc += hello();
0203 if(ALL||strcmp(TEST, "int_")==0) rc += int_();
0204 if(ALL||strcmp(TEST, "Desc")==0) rc += Desc();
0205 if(ALL||strcmp(TEST, "Hit")==0) rc += Hit();
0206
0207 std::cout << "sdigest_test::main rc:" << rc << "\n" ;
0208 return rc ;
0209 }
0210
0211 int main(){ return sdigest_test::main() ; }