Ejemplo n.º 1
0
	void runAll(TestSet& tests) {
		vector<double> times;
		times.reserve(repeatCount);

		vector<unsigned char> v;
		while(tests.next(v)) {
			// give a particular alignment only if necessary
			unique_ptr<aligned_alloc> aa;
			memory<unsigned char> m(v);
			if(testAlignment) {
				bool alignEnd = tests.alignEnd();
				int alignOfs = tests.alignment();
				if(forceAlignment) {
					alignEnd = forceAlignmentFromEnd;
					alignOfs = forceAlignmentOfs;
				}

				// aligned_alloc doesn't do empty allocations, so
				// put those on the zero page
				if(!m.size()) {
					int ptr = alignEnd ? (64 - alignOfs) : alignOfs;
					m = memory<unsigned char>((unsigned char*) ptr, (unsigned char*) ptr);
				} else {
					aa = unique_ptr<aligned_alloc>(new aligned_alloc(
								v,
								alignEnd ? aligned_alloc::END_OF_PAGE : aligned_alloc::START_OF_PAGE,
								alignOfs));
					m = memory<unsigned char>(aa.get()->begin(), aa.get()->end());
				}
			}

			if(RESULT_GOOD != run(tests.description(), m) && dieOnFirstFailure) {
				printf("\n\nStopping early due to error\n");
				break;
			}
		}

		printf("\n\n");
		printf("Good: %0d   (%0d good utf8, %0d bad utf8),    confused: %0d,   failed: %0d\n",
				totals[RESULT_GOOD], goodAccept, goodReject, totals[RESULT_CONFUSION], totals[RESULT_FAILURE]);

		if(printTimings) {
			for(TimingResult& r: timingResults) {
				printf("%s,\"%s\",%lld", r.validator->name().c_str(), r.itemName.c_str(), (long long) r.itemLength);
				for(double d : r.timings)
					printf(",%g", d);
				printf("\n");
			}
		}
	}