mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238059 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "FuzzerInternal.h"
 | |
| #include "gtest/gtest.h"
 | |
| #include <set>
 | |
| 
 | |
| // For now, have LLVMFuzzerTestOneInput just to make it link.
 | |
| // Later we may want to make unittests that actually call LLVMFuzzerTestOneInput.
 | |
| extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
 | |
|   abort();
 | |
| }
 | |
| 
 | |
| TEST(Fuzzer, CrossOver) {
 | |
|   using namespace fuzzer;
 | |
|   Unit A({0, 1, 2}), B({5, 6, 7});
 | |
|   Unit C;
 | |
|   Unit Expected[] = {
 | |
|        { 0 },
 | |
|        { 0, 1 },
 | |
|        { 0, 5 },
 | |
|        { 0, 1, 2 },
 | |
|        { 0, 1, 5 },
 | |
|        { 0, 5, 1 },
 | |
|        { 0, 5, 6 },
 | |
|        { 0, 1, 2, 5 },
 | |
|        { 0, 1, 5, 2 },
 | |
|        { 0, 1, 5, 6 },
 | |
|        { 0, 5, 1, 2 },
 | |
|        { 0, 5, 1, 6 },
 | |
|        { 0, 5, 6, 1 },
 | |
|        { 0, 5, 6, 7 },
 | |
|        { 0, 1, 2, 5, 6 },
 | |
|        { 0, 1, 5, 2, 6 },
 | |
|        { 0, 1, 5, 6, 2 },
 | |
|        { 0, 1, 5, 6, 7 },
 | |
|        { 0, 5, 1, 2, 6 },
 | |
|        { 0, 5, 1, 6, 2 },
 | |
|        { 0, 5, 1, 6, 7 },
 | |
|        { 0, 5, 6, 1, 2 },
 | |
|        { 0, 5, 6, 1, 7 },
 | |
|        { 0, 5, 6, 7, 1 },
 | |
|        { 0, 1, 2, 5, 6, 7 },
 | |
|        { 0, 1, 5, 2, 6, 7 },
 | |
|        { 0, 1, 5, 6, 2, 7 },
 | |
|        { 0, 1, 5, 6, 7, 2 },
 | |
|        { 0, 5, 1, 2, 6, 7 },
 | |
|        { 0, 5, 1, 6, 2, 7 },
 | |
|        { 0, 5, 1, 6, 7, 2 },
 | |
|        { 0, 5, 6, 1, 2, 7 },
 | |
|        { 0, 5, 6, 1, 7, 2 },
 | |
|        { 0, 5, 6, 7, 1, 2 }
 | |
|   };
 | |
|   for (size_t Len = 1; Len < 8; Len++) {
 | |
|     std::set<Unit> FoundUnits, ExpectedUnitsWitThisLength;
 | |
|     for (int Iter = 0; Iter < 3000; Iter++) {
 | |
|       C.resize(Len);
 | |
|       size_t NewSize = CrossOver(A.data(), A.size(), B.data(), B.size(),
 | |
|                                  C.data(), C.size());
 | |
|       C.resize(NewSize);
 | |
|       FoundUnits.insert(C);
 | |
|     }
 | |
|     for (const Unit &U : Expected)
 | |
|       if (U.size() <= Len)
 | |
|         ExpectedUnitsWitThisLength.insert(U);
 | |
|     EXPECT_EQ(ExpectedUnitsWitThisLength, FoundUnits);
 | |
|   }
 | |
| }
 | |
| 
 | |
| TEST(Fuzzer, Hash) {
 | |
|   uint8_t A[] = {'a', 'b', 'c'};
 | |
|   fuzzer::Unit U(A, A + sizeof(A));
 | |
|   EXPECT_EQ("a9993e364706816aba3e25717850c26c9cd0d89d", fuzzer::Hash(U));
 | |
|   U.push_back('d');
 | |
|   EXPECT_EQ("81fe8bfe87576c3ecb22426f8e57847382917acf", fuzzer::Hash(U));
 | |
| }
 |