1212#include < sstream>
1313#include < stdexcept>
1414#include < algorithm>
15+ #include < memory>
1516
1617#include " constants.h"
1718#include " util.h"
19+ #include " GenerationConfig.h"
1820#include " PlotsFile.h"
1921#include " CommandVerify.h"
2022
@@ -48,27 +50,25 @@ int CommandVerify::execute(const std::vector<std::string>& p_args) {
4850 return -1 ;
4951 }
5052
51- unsigned char * generatedBuffer = 0 ;
52- unsigned char * referenceBuffer = 0 ;
53-
54- int returnCode = 0 ;
55-
5653 try {
57- PlotsFile generated (p_args[0 ]);
58- PlotsFile reference (p_args[1 ]);
54+ GenerationConfig generatedConfig (p_args[0 ]);
55+ GenerationConfig referenceConfig (p_args[1 ]);
5956
6057 std::cout << " Checking input parameters..." << std::endl;
6158
62- if (generated .getAddress () != reference .getAddress ()) {
59+ if (generatedConfig .getAddress () != referenceConfig .getAddress ()) {
6360 throw std::runtime_error (" Files don't share the same address" );
6461 }
6562
66- if (sizeof (std::size_t ) == 4 && (generated .getStaggerSize () > 16000 || reference .getStaggerSize () > 16000 )) {
63+ if (sizeof (std::size_t ) == 4 && (generatedConfig .getStaggerSize () > 16000 || referenceConfig .getStaggerSize () > 16000 )) {
6764 throw std::runtime_error (" Stagger size value too high (32bits platform restriction)" );
6865 }
6966
70- unsigned long long commonStart = std::max (generated.getStartNonce (), reference.getStartNonce ());
71- unsigned long long commonEnd = std::min (generated.getEndNonce (), reference.getEndNonce ());
67+ PlotsFile generated (generatedConfig.getFullPath (), false );
68+ PlotsFile reference (referenceConfig.getFullPath (), false );
69+
70+ unsigned long long commonStart = std::max (generatedConfig.getStartNonce (), referenceConfig.getStartNonce ());
71+ unsigned long long commonEnd = std::min (generatedConfig.getEndNonce (), referenceConfig.getEndNonce ());
7272 unsigned int commonNb = commonEnd - commonStart + 1 ;
7373 if (commonStart > commonEnd) {
7474 throw std::runtime_error (" No common nonces between the two files" );
@@ -90,63 +90,54 @@ int CommandVerify::execute(const std::vector<std::string>& p_args) {
9090 std::cout << " CPU memory: " << cryo::util::formatValue (cpuMemory, sizeUnitsB, sizeLabelsB) << std::endl;
9191 std::cout << " ----" << std::endl;
9292
93- generatedBuffer = new unsigned char [generatedBufferSize];
94- if (!generatedBuffer) {
95- throw std::runtime_error (" Unable to create the generated file buffer" );
96- }
97-
98- referenceBuffer = new unsigned char [referenceBufferSize];
99- if (!referenceBuffer) {
100- throw std::runtime_error (" Unable to create the reference file buffer" );
101- }
93+ std::unique_ptr<unsigned char []> generatedBuffer (new unsigned char [generatedBufferSize]);
94+ std::unique_ptr<unsigned char []> referenceBuffer (new unsigned char [referenceBufferSize]);
10295
10396 std::cout << " Checking generated plots file..." << std::endl;
10497
10598 std::ostringstream console;
10699 console << std::fixed << std::setprecision (2 );
107100
108101 for (unsigned int i = 0 ; i < commonNb ; ++i) {
102+ std::cout << std::string (console.str ().length (), ' \b ' );
103+ std::cout << std::string (console.str ().length (), ' ' );
109104 std::cout << std::string (console.str ().length (), ' \b ' );
110105 console.str (" " );
111106
112107 double percent = 100.0 * (double )i / (double )commonNb;
113108 console << percent << " % (" << i << " /" << commonNb << " nonces)" ;
114- console << " ... " ;
109+ console << " ..." ;
115110 std::cout << console.str ();
116111
117- std::streamoff generatedNonceStaggerOffset = generated.getNonceStaggerOffset (commonStart + i);
118- std::streamoff generatedNonceStaggerDecal = generated.getNonceStaggerDecal (commonStart + i);
119-
120- std::streamoff referenceNonceStaggerOffset = reference.getNonceStaggerOffset (commonStart + i);
121- std::streamoff referenceNonceStaggerDecal = reference.getNonceStaggerDecal (commonStart + i);
112+ generated.seek ((std::streamoff)generatedConfig.getNonceStaggerOffset (commonStart + i) + generatedConfig.getNonceStaggerDecal (commonStart + i), std::ios::beg);
113+ reference.seek ((std::streamoff)referenceConfig.getNonceStaggerOffset (commonStart + i) + referenceConfig.getNonceStaggerDecal (commonStart + i), std::ios::beg);
122114
123115 for (unsigned int j = 0 ; j < PLOT_SIZE ; j += SCOOP_SIZE) {
124- generated.seek (generatedNonceStaggerOffset + generatedNonceStaggerDecal + (std::streamoff)j * generated.getStaggerSize ());
125- reference.seek (referenceNonceStaggerOffset + referenceNonceStaggerDecal + (std::streamoff)j * reference.getStaggerSize ());
126-
127- generated.read (generatedBuffer, SCOOP_SIZE);
128- reference.read (referenceBuffer, SCOOP_SIZE);
116+ generated.read (generatedBuffer.get (), SCOOP_SIZE);
117+ reference.read (referenceBuffer.get (), SCOOP_SIZE);
129118
130- if (!std::equal (generatedBuffer, generatedBuffer + SCOOP_SIZE, referenceBuffer)) {
119+ if (!std::equal (generatedBuffer. get () , generatedBuffer. get () + SCOOP_SIZE, referenceBuffer. get () )) {
131120 throw std::runtime_error (" Common nonces doesn't match" );
132121 }
122+
123+ generated.seek (((std::streamoff)generatedConfig.getStaggerSize () - 1 ) * SCOOP_SIZE, std::ios::cur);
124+ reference.seek (((std::streamoff)referenceConfig.getStaggerSize () - 1 ) * SCOOP_SIZE, std::ios::cur);
133125 }
134126 }
135127
136128 std::cout << std::string (console.str ().length (), ' \b ' );
137- std::cout << " 100% (" << commonNb << " /" << commonNb << " nonces)" ;
138- std::cout << " " << std::endl << std::endl;
129+ std::cout << std::string (console.str ().length (), ' ' );
130+ std::cout << std::string (console.str ().length (), ' \b ' );
131+
132+ std::cout << " 100% (" << commonNb << " /" << commonNb << " nonces)" << std::endl << std::endl;
139133 std::cout << " [OK] The generated plots file has been successfully verified against the provided reference" << std::endl;
140134 } catch (const std::exception& ex) {
141135 std::cout << std::endl;
142136 std::cout << " [ERROR] " << ex.what () << std::endl;
143- returnCode = -1 ;
137+ return -1 ;
144138 }
145139
146- if (referenceBuffer) { delete[] referenceBuffer; }
147- if (generatedBuffer) { delete[] generatedBuffer; }
148-
149- return returnCode;
140+ return 0 ;
150141}
151142
152143}}
0 commit comments