xref: /openbsd-src/gnu/llvm/compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp (revision d89ec533011f513df1010f142a111086a0785f09)
13cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
23cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information.
33cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
43cab2bb3Spatrick 
53cab2bb3Spatrick #include "gtest/gtest.h"
63cab2bb3Spatrick #include <cstdint>
73cab2bb3Spatrick #include <cstdlib>
83cab2bb3Spatrick 
93cab2bb3Spatrick #include <fuzzer/FuzzedDataProvider.h>
103cab2bb3Spatrick 
113cab2bb3Spatrick // The test is intentionally extensive, as behavior of |FuzzedDataProvider| must
123cab2bb3Spatrick // not be broken, given than many fuzz targets depend on it. Changing the
133cab2bb3Spatrick // behavior might invalidate existing corpora and make the fuzz targets using
143cab2bb3Spatrick // |FuzzedDataProvider| to lose code coverage accumulated over time.
153cab2bb3Spatrick 
163cab2bb3Spatrick /* A random 1KB buffer generated by:
173cab2bb3Spatrick $ python -c "import os; print ',\n'.join([', '.join(['0x%02X' % ord(i) for i \
183cab2bb3Spatrick       in list(os.urandom(8))]) for _ in xrange(128)])"
193cab2bb3Spatrick */
203cab2bb3Spatrick const uint8_t Data[] = {
213cab2bb3Spatrick     0x8A, 0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E, 0x9B, 0xAA, 0xF3, 0xDA,
223cab2bb3Spatrick     0xAA, 0x88, 0xF2, 0x9B, 0x6C, 0xBA, 0xBE, 0xB1, 0xF2, 0xCF, 0x13, 0xB8,
233cab2bb3Spatrick     0xAC, 0x1A, 0x7F, 0x1C, 0xC9, 0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3, 0xFD,
243cab2bb3Spatrick     0xE3, 0x05, 0xA4, 0x03, 0x37, 0x49, 0x50, 0x4B, 0xBC, 0x39, 0xA2, 0x09,
253cab2bb3Spatrick     0x6C, 0x2F, 0xAF, 0xD1, 0xB5, 0x47, 0xBF, 0x92, 0xBD, 0x79, 0xE5, 0xC5,
263cab2bb3Spatrick     0x6E, 0x51, 0xA4, 0xED, 0xE9, 0xBD, 0x40, 0x4A, 0xFC, 0x25, 0x7A, 0x27,
273cab2bb3Spatrick     0xC8, 0x92, 0xF7, 0x30, 0xDE, 0x40, 0x66, 0x66, 0xE8, 0x5F, 0x65, 0x39,
283cab2bb3Spatrick     0x7E, 0x9E, 0x80, 0x2B, 0x01, 0x71, 0x2A, 0xFF, 0xD3, 0x0A, 0xAC, 0x6E,
293cab2bb3Spatrick     0x49, 0x32, 0x79, 0x10, 0x6A, 0x6F, 0x97, 0x96, 0x70, 0x7E, 0x50, 0x65,
303cab2bb3Spatrick     0xC9, 0x1D, 0xBD, 0x4E, 0x17, 0x04, 0x1E, 0xBA, 0x26, 0xAC, 0x1F, 0xE3,
313cab2bb3Spatrick     0x37, 0x1C, 0x15, 0x43, 0x60, 0x41, 0x2A, 0x7C, 0xCA, 0x70, 0xCE, 0xAB,
323cab2bb3Spatrick     0x20, 0x24, 0xF8, 0xD9, 0x1F, 0x14, 0x7C, 0x5C, 0xDD, 0x6F, 0xB3, 0xD7,
333cab2bb3Spatrick     0x8B, 0x63, 0x10, 0xB7, 0xDA, 0x99, 0xAF, 0x99, 0x01, 0x21, 0xE6, 0xE1,
343cab2bb3Spatrick     0x86, 0x27, 0xBE, 0x8D, 0xDF, 0x1E, 0xEA, 0x80, 0x0B, 0x8A, 0x60, 0xC3,
353cab2bb3Spatrick     0x3A, 0x85, 0x33, 0x53, 0x59, 0xE1, 0xB5, 0xF1, 0x62, 0xA6, 0x7B, 0x24,
363cab2bb3Spatrick     0x94, 0xE3, 0x8C, 0x10, 0x93, 0xF8, 0x6E, 0xC2, 0x00, 0x91, 0x90, 0x0B,
373cab2bb3Spatrick     0x5D, 0x52, 0x4F, 0x21, 0xE3, 0x40, 0x3A, 0x6E, 0xB6, 0x32, 0x15, 0xDB,
383cab2bb3Spatrick     0x5D, 0x01, 0x86, 0x63, 0x83, 0x24, 0xC5, 0xDE, 0xAB, 0x31, 0x84, 0xAA,
393cab2bb3Spatrick     0xE5, 0x64, 0x02, 0x8D, 0x23, 0x82, 0x86, 0x14, 0x16, 0x18, 0x9F, 0x3D,
403cab2bb3Spatrick     0x31, 0xBE, 0x3B, 0xF0, 0x6C, 0x26, 0x42, 0x9A, 0x67, 0xFE, 0x28, 0xEC,
413cab2bb3Spatrick     0x28, 0xDB, 0x01, 0xB4, 0x52, 0x41, 0x81, 0x7C, 0x54, 0xD3, 0xC8, 0x00,
423cab2bb3Spatrick     0x01, 0x66, 0xB0, 0x2C, 0x3F, 0xBC, 0xAF, 0xAC, 0x87, 0xCD, 0x83, 0xCF,
433cab2bb3Spatrick     0x23, 0xFC, 0xC8, 0x97, 0x8C, 0x71, 0x32, 0x8B, 0xBF, 0x70, 0xC0, 0x48,
443cab2bb3Spatrick     0x31, 0x92, 0x18, 0xFE, 0xE5, 0x33, 0x48, 0x82, 0x98, 0x1E, 0x30, 0xCC,
453cab2bb3Spatrick     0xAD, 0x5D, 0x97, 0xC4, 0xB4, 0x39, 0x7C, 0xCD, 0x39, 0x44, 0xF1, 0xA9,
463cab2bb3Spatrick     0xD0, 0xF4, 0x27, 0xB7, 0x78, 0x85, 0x9E, 0x72, 0xFC, 0xCC, 0xEE, 0x98,
473cab2bb3Spatrick     0x25, 0x3B, 0x69, 0x6B, 0x0C, 0x11, 0xEA, 0x22, 0xB6, 0xD0, 0xCD, 0xBF,
483cab2bb3Spatrick     0x6D, 0xBE, 0x12, 0xDE, 0xFE, 0x78, 0x2E, 0x54, 0xCB, 0xBA, 0xD7, 0x2E,
493cab2bb3Spatrick     0x54, 0x25, 0x14, 0x84, 0xFE, 0x1A, 0x10, 0xCE, 0xCC, 0x20, 0xE6, 0xE2,
503cab2bb3Spatrick     0x7F, 0xE0, 0x5F, 0xDB, 0xA7, 0xF3, 0xE2, 0x4C, 0x52, 0x82, 0xFC, 0x0B,
513cab2bb3Spatrick     0xA0, 0xBD, 0x34, 0x21, 0xF7, 0xEB, 0x1C, 0x5B, 0x67, 0xD0, 0xAF, 0x22,
523cab2bb3Spatrick     0x15, 0xA1, 0xFF, 0xC2, 0x68, 0x25, 0x5B, 0xB2, 0x13, 0x3F, 0xFF, 0x98,
533cab2bb3Spatrick     0x53, 0x25, 0xC5, 0x58, 0x39, 0xD0, 0x43, 0x86, 0x6C, 0x5B, 0x57, 0x8E,
543cab2bb3Spatrick     0x83, 0xBA, 0xB9, 0x09, 0x09, 0x14, 0x0C, 0x9E, 0x99, 0x83, 0x88, 0x53,
553cab2bb3Spatrick     0x79, 0xFD, 0xF7, 0x49, 0xE9, 0x2C, 0xCE, 0xE6, 0x7B, 0xF5, 0xC2, 0x27,
563cab2bb3Spatrick     0x5E, 0x56, 0xB5, 0xB4, 0x46, 0x90, 0x91, 0x7F, 0x99, 0x88, 0xA7, 0x23,
573cab2bb3Spatrick     0xC1, 0x80, 0xB8, 0x2D, 0xCD, 0xF7, 0x6F, 0x9A, 0xEC, 0xBD, 0x16, 0x9F,
583cab2bb3Spatrick     0x7D, 0x87, 0x1E, 0x15, 0x51, 0xC4, 0x96, 0xE2, 0xBF, 0x61, 0x66, 0xB5,
593cab2bb3Spatrick     0xFD, 0x01, 0x67, 0xD6, 0xFF, 0xD2, 0x14, 0x20, 0x98, 0x8E, 0xEF, 0xF3,
603cab2bb3Spatrick     0x22, 0xDB, 0x7E, 0xCE, 0x70, 0x2D, 0x4C, 0x06, 0x5A, 0xA0, 0x4F, 0xC8,
613cab2bb3Spatrick     0xB0, 0x4D, 0xA6, 0x52, 0xB2, 0xD6, 0x2F, 0xD8, 0x57, 0xE5, 0xEF, 0xF9,
623cab2bb3Spatrick     0xEE, 0x52, 0x0F, 0xEC, 0xC4, 0x90, 0x33, 0xAD, 0x25, 0xDA, 0xCD, 0x12,
633cab2bb3Spatrick     0x44, 0x5F, 0x32, 0xF6, 0x6F, 0xEF, 0x85, 0xB8, 0xDC, 0x3C, 0x01, 0x48,
643cab2bb3Spatrick     0x28, 0x5D, 0x2D, 0x9C, 0x9B, 0xC0, 0x49, 0x36, 0x1E, 0x6A, 0x0A, 0x0C,
653cab2bb3Spatrick     0xB0, 0x6E, 0x81, 0x89, 0xCB, 0x0A, 0x89, 0xCF, 0x73, 0xC6, 0x63, 0x3D,
663cab2bb3Spatrick     0x8E, 0x13, 0x57, 0x91, 0x4E, 0xA3, 0x93, 0x8C, 0x61, 0x67, 0xFD, 0x13,
673cab2bb3Spatrick     0xE0, 0x14, 0x72, 0xB3, 0xE4, 0x23, 0x45, 0x08, 0x4E, 0x4E, 0xF5, 0xA7,
683cab2bb3Spatrick     0xA8, 0xEE, 0x30, 0xFD, 0x81, 0x80, 0x1F, 0xF3, 0x4F, 0xD7, 0xE7, 0xF2,
693cab2bb3Spatrick     0x16, 0xC0, 0xD6, 0x15, 0x6A, 0x0F, 0x89, 0x15, 0xA9, 0xCF, 0x35, 0x50,
703cab2bb3Spatrick     0x6B, 0x49, 0x3E, 0x12, 0x4A, 0x72, 0xE4, 0x59, 0x9D, 0xD7, 0xDB, 0xD2,
713cab2bb3Spatrick     0xD1, 0x61, 0x7D, 0x52, 0x4A, 0x36, 0xF6, 0xBA, 0x0E, 0xFA, 0x88, 0x6F,
723cab2bb3Spatrick     0x3C, 0x82, 0x16, 0xF0, 0xD5, 0xED, 0x4D, 0x78, 0xEF, 0x38, 0x17, 0x90,
733cab2bb3Spatrick     0xEA, 0x28, 0x32, 0xA9, 0x79, 0x40, 0xFF, 0xAA, 0xE6, 0xF5, 0xC7, 0x96,
743cab2bb3Spatrick     0x56, 0x65, 0x61, 0x83, 0x3D, 0xBD, 0xD7, 0xED, 0xD6, 0xB6, 0xC0, 0xED,
753cab2bb3Spatrick     0x34, 0xAA, 0x60, 0xA9, 0xE8, 0x82, 0x78, 0xEA, 0x69, 0xF6, 0x47, 0xAF,
763cab2bb3Spatrick     0x39, 0xAB, 0x11, 0xDB, 0xE9, 0xFB, 0x68, 0x0C, 0xFE, 0xDF, 0x97, 0x9F,
773cab2bb3Spatrick     0x3A, 0xF4, 0xF3, 0x32, 0x27, 0x30, 0x57, 0x0E, 0xF7, 0xB2, 0xEE, 0xFB,
783cab2bb3Spatrick     0x1E, 0x98, 0xA8, 0xA3, 0x25, 0x45, 0xE4, 0x6D, 0x2D, 0xAE, 0xFE, 0xDA,
793cab2bb3Spatrick     0xB3, 0x32, 0x9B, 0x5D, 0xF5, 0x32, 0x74, 0xEA, 0xE5, 0x02, 0x30, 0x53,
803cab2bb3Spatrick     0x95, 0x13, 0x7A, 0x23, 0x1F, 0x10, 0x30, 0xEA, 0x78, 0xE4, 0x36, 0x1D,
813cab2bb3Spatrick     0x92, 0x96, 0xB9, 0x91, 0x2D, 0xFA, 0x43, 0xAB, 0xE6, 0xEF, 0x14, 0x14,
823cab2bb3Spatrick     0xC9, 0xBC, 0x46, 0xC6, 0x05, 0x7C, 0xC6, 0x11, 0x23, 0xCF, 0x3D, 0xC8,
833cab2bb3Spatrick     0xBE, 0xEC, 0xA3, 0x58, 0x31, 0x55, 0x65, 0x14, 0xA7, 0x94, 0x93, 0xDD,
843cab2bb3Spatrick     0x2D, 0x76, 0xC9, 0x66, 0x06, 0xBD, 0xF5, 0xE7, 0x30, 0x65, 0x42, 0x52,
853cab2bb3Spatrick     0xA2, 0x50, 0x9B, 0xE6, 0x40, 0xA2, 0x4B, 0xEC, 0xA6, 0xB7, 0x39, 0xAA,
863cab2bb3Spatrick     0xD7, 0x61, 0x2C, 0xBF, 0x37, 0x5A, 0xDA, 0xB3, 0x5D, 0x2F, 0x5D, 0x11,
873cab2bb3Spatrick     0x82, 0x97, 0x32, 0x8A, 0xC1, 0xA1, 0x13, 0x20, 0x17, 0xBD, 0xA2, 0x91,
883cab2bb3Spatrick     0x94, 0x2A, 0x4E, 0xBE, 0x3E, 0x77, 0x63, 0x67, 0x5C, 0x0A, 0xE1, 0x22,
893cab2bb3Spatrick     0x0A, 0x4F, 0x63, 0xE2, 0x84, 0xE9, 0x9F, 0x14, 0x86, 0xE2, 0x4B, 0x20,
903cab2bb3Spatrick     0x9F, 0x50, 0xB3, 0x56, 0xED, 0xDE, 0x39, 0xD8, 0x75, 0x64, 0x45, 0x54,
913cab2bb3Spatrick     0xE5, 0x34, 0x57, 0x8C, 0x3B, 0xF2, 0x0E, 0x94, 0x1B, 0x10, 0xA2, 0xA2,
923cab2bb3Spatrick     0x38, 0x76, 0x21, 0x8E, 0x2A, 0x57, 0x64, 0x58, 0x0A, 0x27, 0x6D, 0x4C,
933cab2bb3Spatrick     0xD0, 0xB5, 0xC1, 0xFC, 0x75, 0xD0, 0x01, 0x86, 0x66, 0xA8, 0xF1, 0x98,
943cab2bb3Spatrick     0x58, 0xFB, 0xFC, 0x64, 0xD2, 0x31, 0x77, 0xAD, 0x0E, 0x46, 0x87, 0xCC,
953cab2bb3Spatrick     0x9B, 0x86, 0x90, 0xFF, 0xB6, 0x64, 0x35, 0xA5, 0x5D, 0x9E, 0x44, 0x51,
963cab2bb3Spatrick     0x87, 0x9E, 0x1E, 0xEE, 0xF3, 0x3B, 0x5C, 0xDD, 0x94, 0x03, 0xAA, 0x18,
973cab2bb3Spatrick     0x2C, 0xB7, 0xC4, 0x37, 0xD5, 0x53, 0x28, 0x60, 0xEF, 0x77, 0xEF, 0x3B,
983cab2bb3Spatrick     0x9E, 0xD2, 0xCE, 0xE9, 0x53, 0x2D, 0xF5, 0x19, 0x7E, 0xBB, 0xB5, 0x46,
993cab2bb3Spatrick     0xE2, 0xF7, 0xD6, 0x4D, 0x6D, 0x5B, 0x81, 0x56, 0x6B, 0x12, 0x55, 0x63,
1003cab2bb3Spatrick     0xC3, 0xAB, 0x08, 0xBB, 0x2E, 0xD5, 0x11, 0xBC, 0x18, 0xCB, 0x8B, 0x12,
1013cab2bb3Spatrick     0x2E, 0x3E, 0x75, 0x32, 0x98, 0x8A, 0xDE, 0x3C, 0xEA, 0x33, 0x46, 0xE7,
1023cab2bb3Spatrick     0x7A, 0xA5, 0x12, 0x09, 0x26, 0x7E, 0x7E, 0x03, 0x4F, 0xFD, 0xC0, 0xFD,
1033cab2bb3Spatrick     0xEA, 0x4F, 0x83, 0x85, 0x39, 0x62, 0xFB, 0xA2, 0x33, 0xD9, 0x2D, 0xB1,
1043cab2bb3Spatrick     0x30, 0x6F, 0x88, 0xAB, 0x61, 0xCB, 0x32, 0xEB, 0x30, 0xF9, 0x51, 0xF6,
1053cab2bb3Spatrick     0x1F, 0x3A, 0x11, 0x4D, 0xFD, 0x54, 0xD6, 0x3D, 0x43, 0x73, 0x39, 0x16,
1063cab2bb3Spatrick     0xCF, 0x3D, 0x29, 0x4A};
1073cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeBytes)1083cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeBytes) {
1093cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
1103cab2bb3Spatrick   EXPECT_EQ(std::vector<unsigned char>(1, 0x8A),
1113cab2bb3Spatrick             DataProv.ConsumeBytes<unsigned char>(1));
1123cab2bb3Spatrick   EXPECT_EQ(std::vector<uint8_t>(
1133cab2bb3Spatrick                 {0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E, 0x9B, 0xAA, 0xF3}),
1143cab2bb3Spatrick             DataProv.ConsumeBytes<uint8_t>(10));
1153cab2bb3Spatrick 
1163cab2bb3Spatrick   std::vector<unsigned char> UChars = DataProv.ConsumeBytes<unsigned char>(24);
1173cab2bb3Spatrick   EXPECT_EQ(std::vector<unsigned char>({0xDA, 0xAA, 0x88, 0xF2, 0x9B, 0x6C,
1183cab2bb3Spatrick                                         0xBA, 0xBE, 0xB1, 0xF2, 0xCF, 0x13,
1193cab2bb3Spatrick                                         0xB8, 0xAC, 0x1A, 0x7F, 0x1C, 0xC9,
1203cab2bb3Spatrick                                         0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3}),
1213cab2bb3Spatrick             UChars);
1223cab2bb3Spatrick 
1233cab2bb3Spatrick   EXPECT_EQ(std::vector<signed char>(Data + 1 + 10 + 24, Data + sizeof(Data)),
1243cab2bb3Spatrick             DataProv.ConsumeBytes<signed char>(31337));
1253cab2bb3Spatrick }
1263cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeBytesWithTerminator)1273cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeBytesWithTerminator) {
1283cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
1293cab2bb3Spatrick   EXPECT_EQ(std::vector<unsigned char>({0x8A, 0x00}),
1303cab2bb3Spatrick             DataProv.ConsumeBytesWithTerminator<unsigned char>(1));
1313cab2bb3Spatrick   EXPECT_EQ(std::vector<uint8_t>({0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E,
1323cab2bb3Spatrick                                   0x9B, 0xAA, 0xF3, 111}),
1333cab2bb3Spatrick             DataProv.ConsumeBytesWithTerminator<uint8_t>(10, 111));
1343cab2bb3Spatrick 
1353cab2bb3Spatrick   std::vector<unsigned char> UChars =
1363cab2bb3Spatrick       DataProv.ConsumeBytesWithTerminator<unsigned char>(24);
1373cab2bb3Spatrick   EXPECT_EQ(std::vector<unsigned char>(
1383cab2bb3Spatrick                 {0xDA, 0xAA, 0x88, 0xF2, 0x9B, 0x6C, 0xBA, 0xBE, 0xB1,
1393cab2bb3Spatrick                  0xF2, 0xCF, 0x13, 0xB8, 0xAC, 0x1A, 0x7F, 0x1C, 0xC9,
1403cab2bb3Spatrick                  0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3, 0x00}),
1413cab2bb3Spatrick             UChars);
1423cab2bb3Spatrick 
1433cab2bb3Spatrick   std::vector<signed char> Expected(Data + 1 + 10 + 24, Data + sizeof(Data));
1443cab2bb3Spatrick   Expected.push_back(65);
1453cab2bb3Spatrick   EXPECT_EQ(Expected,
1463cab2bb3Spatrick             DataProv.ConsumeBytesWithTerminator<signed char>(31337, 65));
1473cab2bb3Spatrick }
1483cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeBytesAsString)1493cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeBytesAsString) {
1503cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
1513cab2bb3Spatrick   EXPECT_EQ(std::string("\x8A\x19\x0D\x44\x37\x0D\x38\x5E\x9B\xAA\xF3\xDA"),
1523cab2bb3Spatrick             DataProv.ConsumeBytesAsString(12));
1533cab2bb3Spatrick   EXPECT_EQ(std::string(Data + 12, Data + sizeof(Data)),
1543cab2bb3Spatrick             DataProv.ConsumeBytesAsString(31337));
1553cab2bb3Spatrick }
1563cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeIntegralInRange)1573cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeIntegralInRange) {
1583cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
1593cab2bb3Spatrick   EXPECT_EQ(int32_t(21), DataProv.ConsumeIntegralInRange<int32_t>(10, 30));
1603cab2bb3Spatrick   EXPECT_EQ(int32_t(1337),
1613cab2bb3Spatrick             DataProv.ConsumeIntegralInRange<int32_t>(1337, 1337));
1623cab2bb3Spatrick   EXPECT_EQ(int8_t(-59), DataProv.ConsumeIntegralInRange<int8_t>(-100, 100));
1633cab2bb3Spatrick   EXPECT_EQ(uint16_t(15823),
1643cab2bb3Spatrick             DataProv.ConsumeIntegralInRange<uint16_t>(0, 65535));
1653cab2bb3Spatrick   EXPECT_EQ((signed char)(-101),
1663cab2bb3Spatrick             DataProv.ConsumeIntegralInRange<signed char>(-123, 123));
1673cab2bb3Spatrick   EXPECT_EQ(int64_t(-53253077544), DataProv.ConsumeIntegralInRange<int64_t>(
1683cab2bb3Spatrick                                        -99999999999, 99999999999));
1693cab2bb3Spatrick 
1703cab2bb3Spatrick   // Exhaust the buffer.
1713cab2bb3Spatrick   auto String = DataProv.ConsumeBytesAsString(31337);
1723cab2bb3Spatrick   EXPECT_EQ(size_t(1014), String.length());
1733cab2bb3Spatrick   EXPECT_EQ(uint64_t(123456789),
1743cab2bb3Spatrick             DataProv.ConsumeIntegralInRange<uint64_t>(123456789, 987654321));
1753cab2bb3Spatrick }
1763cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeRandomLengthString)1773cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeRandomLengthString) {
1783cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
1793cab2bb3Spatrick   EXPECT_EQ(
1803cab2bb3Spatrick       std::string(
1813cab2bb3Spatrick           "\x8A\x19\x0D\x44\x37\x0D\x38\x5E\x9B\xAA\xF3\xDA\xAA\x88\xF2\x9B\x6C"
1823cab2bb3Spatrick           "\xBA\xBE\xB1\xF2\xCF\x13\xB8\xAC\x1A\x7F\x1C\xC9\x90\xD0\xD9"),
1833cab2bb3Spatrick       DataProv.ConsumeRandomLengthString(1337));
1843cab2bb3Spatrick   EXPECT_EQ(std::string(
1853cab2bb3Spatrick                 "\xB3\xFD\xE3\x05\xA4\x03\x37\x49\x50\x4B\xBC\x39\xA2\x09\x6C"
1863cab2bb3Spatrick                 "\x2F\xAF\xD1\xB5\x47\xBF\x92\xBD\x79\xE5\xC5\x6E\x51\xA4\xED"
1873cab2bb3Spatrick                 "\xE9\xBD\x40\x4A\xFC\x25\x7A\x27\xC8\x92\xF7\x30\xDE\x40\x66"
1883cab2bb3Spatrick                 "\x66\xE8\x5F\x65\x39\x7E\x9E\x80\x2B\x01\x71\x2A\xFF\xD3\x0A"
1893cab2bb3Spatrick                 "\xAC\x6E\x49\x32\x79\x10\x6A\x6F\x97\x96\x70\x7E\x50\x65\xC9"
1903cab2bb3Spatrick                 "\x1D\xBD\x4E\x17\x04\x1E\xBA\x26\xAC\x1F\xE3\x37\x1C\x15\x43"
1913cab2bb3Spatrick                 "\x60\x41\x2A\x7C\xCA\x70\xCE\xAB\x20\x24\xF8\xD9\x1F\x14\x7C"),
1923cab2bb3Spatrick             DataProv.ConsumeRandomLengthString(31337));
1931f9cb04fSpatrick   size_t Offset = 141;
1941f9cb04fSpatrick   EXPECT_EQ(std::string(Data + Offset, Data + Offset + 5),
1953cab2bb3Spatrick             DataProv.ConsumeRandomLengthString(5));
1961f9cb04fSpatrick   Offset += 5;
1971f9cb04fSpatrick   EXPECT_EQ(std::string(Data + Offset, Data + Offset + 2),
1983cab2bb3Spatrick             DataProv.ConsumeRandomLengthString(2));
1991f9cb04fSpatrick   Offset += 2;
2001f9cb04fSpatrick 
2011f9cb04fSpatrick   // Call the overloaded method without arguments (uses max length available).
2021f9cb04fSpatrick   EXPECT_EQ(std::string(Data + Offset, Data + Offset + 664),
2031f9cb04fSpatrick             DataProv.ConsumeRandomLengthString());
2041f9cb04fSpatrick   Offset += 664 + 2; // +2 because of '\' character followed by any other byte.
2051f9cb04fSpatrick 
2061f9cb04fSpatrick   EXPECT_EQ(std::string(Data + Offset, Data + Offset + 92),
2071f9cb04fSpatrick             DataProv.ConsumeRandomLengthString());
2081f9cb04fSpatrick   Offset += 92 + 2;
2093cab2bb3Spatrick 
2103cab2bb3Spatrick   // Exhaust the buffer.
2113cab2bb3Spatrick   auto String = DataProv.ConsumeBytesAsString(31337);
2121f9cb04fSpatrick   EXPECT_EQ(size_t(116), String.length());
2133cab2bb3Spatrick   EXPECT_EQ(std::string(), DataProv.ConsumeRandomLengthString(1));
2143cab2bb3Spatrick }
2153cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeRemainingBytes)2163cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeRemainingBytes) {
2173cab2bb3Spatrick   {
2183cab2bb3Spatrick     FuzzedDataProvider DataProv(Data, sizeof(Data));
2193cab2bb3Spatrick     EXPECT_EQ(std::vector<uint8_t>(Data, Data + sizeof(Data)),
2203cab2bb3Spatrick               DataProv.ConsumeRemainingBytes<uint8_t>());
2213cab2bb3Spatrick     EXPECT_EQ(std::vector<uint8_t>(),
2223cab2bb3Spatrick               DataProv.ConsumeRemainingBytes<uint8_t>());
2233cab2bb3Spatrick   }
2243cab2bb3Spatrick 
2253cab2bb3Spatrick   {
2263cab2bb3Spatrick     FuzzedDataProvider DataProv(Data, sizeof(Data));
2273cab2bb3Spatrick     EXPECT_EQ(std::vector<uint8_t>(Data, Data + 123),
2283cab2bb3Spatrick               DataProv.ConsumeBytes<uint8_t>(123));
2293cab2bb3Spatrick     EXPECT_EQ(std::vector<char>(Data + 123, Data + sizeof(Data)),
2303cab2bb3Spatrick               DataProv.ConsumeRemainingBytes<char>());
2313cab2bb3Spatrick   }
2323cab2bb3Spatrick }
2333cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeRemainingBytesAsString)2343cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeRemainingBytesAsString) {
2353cab2bb3Spatrick   {
2363cab2bb3Spatrick     FuzzedDataProvider DataProv(Data, sizeof(Data));
2373cab2bb3Spatrick     EXPECT_EQ(std::string(Data, Data + sizeof(Data)),
2383cab2bb3Spatrick               DataProv.ConsumeRemainingBytesAsString());
2393cab2bb3Spatrick     EXPECT_EQ(std::string(""), DataProv.ConsumeRemainingBytesAsString());
2403cab2bb3Spatrick   }
2413cab2bb3Spatrick 
2423cab2bb3Spatrick   {
2433cab2bb3Spatrick     FuzzedDataProvider DataProv(Data, sizeof(Data));
2443cab2bb3Spatrick     EXPECT_EQ(std::vector<uint8_t>(Data, Data + 123),
2453cab2bb3Spatrick               DataProv.ConsumeBytes<uint8_t>(123));
2463cab2bb3Spatrick     EXPECT_EQ(std::string(Data + 123, Data + sizeof(Data)),
2473cab2bb3Spatrick               DataProv.ConsumeRemainingBytesAsString());
2483cab2bb3Spatrick   }
2493cab2bb3Spatrick }
2503cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeIntegral)2513cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeIntegral) {
2523cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
2533cab2bb3Spatrick   EXPECT_EQ(int32_t(-903266865), DataProv.ConsumeIntegral<int32_t>());
2543cab2bb3Spatrick   EXPECT_EQ(uint32_t(372863811), DataProv.ConsumeIntegral<uint32_t>());
2553cab2bb3Spatrick   EXPECT_EQ(uint8_t(61), DataProv.ConsumeIntegral<uint8_t>());
2563cab2bb3Spatrick   EXPECT_EQ(int16_t(22100), DataProv.ConsumeIntegral<int16_t>());
2573cab2bb3Spatrick   EXPECT_EQ(uint64_t(18252263806144500217u),
2583cab2bb3Spatrick             DataProv.ConsumeIntegral<uint64_t>());
2593cab2bb3Spatrick 
2603cab2bb3Spatrick   // Exhaust the buffer.
2613cab2bb3Spatrick   auto String = DataProv.ConsumeBytesAsString(31337);
2623cab2bb3Spatrick   EXPECT_EQ(size_t(1005), String.length());
2633cab2bb3Spatrick   EXPECT_EQ(std::numeric_limits<int64_t>::min(),
2643cab2bb3Spatrick             DataProv.ConsumeIntegral<int64_t>());
2653cab2bb3Spatrick }
2663cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeBool)2673cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeBool) {
2683cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
2693cab2bb3Spatrick   EXPECT_EQ(false, DataProv.ConsumeBool());
2703cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2713cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2723cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2733cab2bb3Spatrick   EXPECT_EQ(false, DataProv.ConsumeBool());
2743cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2753cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2763cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2773cab2bb3Spatrick   EXPECT_EQ(true, DataProv.ConsumeBool());
2783cab2bb3Spatrick   EXPECT_EQ(false, DataProv.ConsumeBool());
2793cab2bb3Spatrick 
2803cab2bb3Spatrick   // Exhaust the buffer.
2813cab2bb3Spatrick   auto String = DataProv.ConsumeBytesAsString(31337);
2823cab2bb3Spatrick   EXPECT_EQ(size_t(1014), String.length());
2833cab2bb3Spatrick   EXPECT_EQ(false, DataProv.ConsumeBool());
2843cab2bb3Spatrick }
2853cab2bb3Spatrick 
TEST(FuzzedDataProvider,PickValueInStdArray)286*d89ec533Spatrick TEST(FuzzedDataProvider, PickValueInStdArray) {
287*d89ec533Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
288*d89ec533Spatrick   const std::array<int, 5> Array = {1, 2, 3, 4, 5};
289*d89ec533Spatrick   EXPECT_EQ(5, DataProv.PickValueInArray(Array));
290*d89ec533Spatrick   EXPECT_EQ(2, DataProv.PickValueInArray(Array));
291*d89ec533Spatrick   EXPECT_EQ(2, DataProv.PickValueInArray(Array));
292*d89ec533Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
293*d89ec533Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
294*d89ec533Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
295*d89ec533Spatrick   EXPECT_EQ(1, DataProv.PickValueInArray(Array));
296*d89ec533Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
297*d89ec533Spatrick   EXPECT_EQ(2, DataProv.PickValueInArray(Array));
298*d89ec533Spatrick }
299*d89ec533Spatrick 
TEST(FuzzedDataProvider,PickValueInArray)3003cab2bb3Spatrick TEST(FuzzedDataProvider, PickValueInArray) {
3013cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
3023cab2bb3Spatrick   const int Array[] = {1, 2, 3, 4, 5};
3033cab2bb3Spatrick   EXPECT_EQ(5, DataProv.PickValueInArray(Array));
3043cab2bb3Spatrick   EXPECT_EQ(2, DataProv.PickValueInArray(Array));
3053cab2bb3Spatrick   EXPECT_EQ(2, DataProv.PickValueInArray(Array));
3063cab2bb3Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
3073cab2bb3Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
3083cab2bb3Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
3093cab2bb3Spatrick   EXPECT_EQ(1, DataProv.PickValueInArray(Array));
3103cab2bb3Spatrick   EXPECT_EQ(3, DataProv.PickValueInArray(Array));
3113cab2bb3Spatrick   EXPECT_EQ(2, DataProv.PickValueInArray(Array));
3123cab2bb3Spatrick 
3133cab2bb3Spatrick   EXPECT_EQ(uint8_t(0x9D), DataProv.PickValueInArray(Data));
3143cab2bb3Spatrick   EXPECT_EQ(uint8_t(0xBA), DataProv.PickValueInArray(Data));
3153cab2bb3Spatrick   EXPECT_EQ(uint8_t(0x69), DataProv.PickValueInArray(Data));
3163cab2bb3Spatrick   EXPECT_EQ(uint8_t(0xD6), DataProv.PickValueInArray(Data));
3173cab2bb3Spatrick 
3183cab2bb3Spatrick   EXPECT_EQ(uint32_t(777), DataProv.PickValueInArray<uint32_t>({1337, 777}));
3193cab2bb3Spatrick   EXPECT_EQ(uint32_t(777), DataProv.PickValueInArray<uint32_t>({1337, 777}));
3203cab2bb3Spatrick   EXPECT_EQ(uint64_t(1337), DataProv.PickValueInArray<uint64_t>({1337, 777}));
3213cab2bb3Spatrick   EXPECT_EQ(size_t(777), DataProv.PickValueInArray<size_t>({1337, 777}));
3223cab2bb3Spatrick   EXPECT_EQ(int16_t(1337), DataProv.PickValueInArray<int16_t>({1337, 777}));
3233cab2bb3Spatrick   EXPECT_EQ(int32_t(777), DataProv.PickValueInArray<int32_t>({1337, 777}));
3243cab2bb3Spatrick   EXPECT_EQ(int64_t(777), DataProv.PickValueInArray<int64_t>({1337, 777}));
3253cab2bb3Spatrick 
3263cab2bb3Spatrick   // Exhaust the buffer.
3273cab2bb3Spatrick   auto String = DataProv.ConsumeBytesAsString(31337);
3283cab2bb3Spatrick   EXPECT_EQ(size_t(1000), String.length());
3293cab2bb3Spatrick   EXPECT_EQ(uint8_t(0x8A), DataProv.PickValueInArray(Data));
3303cab2bb3Spatrick }
3313cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeEnum)3323cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeEnum) {
3333cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
3343cab2bb3Spatrick   enum class Enum {
3353cab2bb3Spatrick     Zero,
3363cab2bb3Spatrick     One,
3373cab2bb3Spatrick     Two,
3383cab2bb3Spatrick     Three,
3393cab2bb3Spatrick     Four,
3403cab2bb3Spatrick     Five,
3413cab2bb3Spatrick     Six,
3423cab2bb3Spatrick     Seven,
3433cab2bb3Spatrick     kMaxValue = Seven
3443cab2bb3Spatrick   };
3453cab2bb3Spatrick   EXPECT_EQ(Enum::Two, DataProv.ConsumeEnum<Enum>());
3463cab2bb3Spatrick   EXPECT_EQ(Enum::One, DataProv.ConsumeEnum<Enum>());
3473cab2bb3Spatrick   EXPECT_EQ(Enum::Five, DataProv.ConsumeEnum<Enum>());
3483cab2bb3Spatrick   EXPECT_EQ(Enum::Seven, DataProv.ConsumeEnum<Enum>());
3493cab2bb3Spatrick   EXPECT_EQ(Enum::Six, DataProv.ConsumeEnum<Enum>());
3503cab2bb3Spatrick   EXPECT_EQ(Enum::One, DataProv.ConsumeEnum<Enum>());
3513cab2bb3Spatrick   EXPECT_EQ(Enum::Three, DataProv.ConsumeEnum<Enum>());
3523cab2bb3Spatrick   EXPECT_EQ(Enum::Three, DataProv.ConsumeEnum<Enum>());
3533cab2bb3Spatrick   EXPECT_EQ(Enum::Five, DataProv.ConsumeEnum<Enum>());
3543cab2bb3Spatrick   EXPECT_EQ(Enum::Six, DataProv.ConsumeEnum<Enum>());
3553cab2bb3Spatrick 
3563cab2bb3Spatrick   // Exhaust the buffer.
3573cab2bb3Spatrick   auto String = DataProv.ConsumeBytesAsString(31337);
3583cab2bb3Spatrick   EXPECT_EQ(size_t(1014), String.length());
3593cab2bb3Spatrick   EXPECT_EQ(Enum::Zero, DataProv.ConsumeEnum<Enum>());
3603cab2bb3Spatrick }
3613cab2bb3Spatrick 
TEST(FuzzedDataProvider,remaining_bytes)3623cab2bb3Spatrick TEST(FuzzedDataProvider, remaining_bytes) {
3633cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
3643cab2bb3Spatrick   EXPECT_EQ(size_t(1024), DataProv.remaining_bytes());
3653cab2bb3Spatrick   EXPECT_EQ(false, DataProv.ConsumeBool());
3663cab2bb3Spatrick   EXPECT_EQ(size_t(1024 - 1), DataProv.remaining_bytes());
3673cab2bb3Spatrick   EXPECT_EQ(std::vector<uint8_t>(Data, Data + 8),
3683cab2bb3Spatrick             DataProv.ConsumeBytes<uint8_t>(8));
3693cab2bb3Spatrick   EXPECT_EQ(size_t(1024 - 1 - 8), DataProv.remaining_bytes());
3703cab2bb3Spatrick 
3713cab2bb3Spatrick   // Exhaust the buffer.
3723cab2bb3Spatrick   EXPECT_EQ(std::vector<uint8_t>(Data + 8, Data + sizeof(Data) - 1),
3733cab2bb3Spatrick             DataProv.ConsumeRemainingBytes<uint8_t>());
3743cab2bb3Spatrick   EXPECT_EQ(size_t(0), DataProv.remaining_bytes());
3753cab2bb3Spatrick }
3763cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeProbability)3773cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeProbability) {
3783cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
3793cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(0.28969181), DataProv.ConsumeProbability<float>());
3803cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(0.086814121166605432),
3813cab2bb3Spatrick                    DataProv.ConsumeProbability<double>());
3823cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(0.30104411), DataProv.ConsumeProbability<float>());
3833cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(0.96218831486039413),
3843cab2bb3Spatrick                    DataProv.ConsumeProbability<double>());
3853cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(0.67005056), DataProv.ConsumeProbability<float>());
3863cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(0.69210584173832279),
3873cab2bb3Spatrick                    DataProv.ConsumeProbability<double>());
3883cab2bb3Spatrick 
3893cab2bb3Spatrick   // Exhaust the buffer.
3903cab2bb3Spatrick   EXPECT_EQ(std::vector<uint8_t>(Data, Data + sizeof(Data) - 36),
3913cab2bb3Spatrick             DataProv.ConsumeRemainingBytes<uint8_t>());
3923cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(0.0), DataProv.ConsumeProbability<float>());
3933cab2bb3Spatrick }
3943cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeFloatingPoint)3953cab2bb3Spatrick TEST(FuzzedDataProvider, ConsumeFloatingPoint) {
3963cab2bb3Spatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
3973cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(-2.8546307e+38),
3983cab2bb3Spatrick                   DataProv.ConsumeFloatingPoint<float>());
3993cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(8.0940194040236032e+307),
4003cab2bb3Spatrick                    DataProv.ConsumeFloatingPoint<double>());
4013cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(271.49084),
4023cab2bb3Spatrick                   DataProv.ConsumeFloatingPointInRange<float>(123.0, 777.0));
4033cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(30.859126145478349),
4043cab2bb3Spatrick                    DataProv.ConsumeFloatingPointInRange<double>(13.37, 31.337));
4053cab2bb3Spatrick   ASSERT_FLOAT_EQ(
4063cab2bb3Spatrick       float(-903.47729),
4073cab2bb3Spatrick       DataProv.ConsumeFloatingPointInRange<float>(-999.9999, -777.77));
4083cab2bb3Spatrick   ASSERT_DOUBLE_EQ(
4093cab2bb3Spatrick       double(24.561393182922771),
4103cab2bb3Spatrick       DataProv.ConsumeFloatingPointInRange<double>(-13.37, 31.337));
4113cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(1.0),
4123cab2bb3Spatrick                   DataProv.ConsumeFloatingPointInRange<float>(1.0, 1.0));
4133cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(-1.0),
4143cab2bb3Spatrick                    DataProv.ConsumeFloatingPointInRange<double>(-1.0, -1.0));
4153cab2bb3Spatrick 
4163cab2bb3Spatrick   // Exhaust the buffer.
4173cab2bb3Spatrick   EXPECT_EQ((std::vector<uint8_t>(Data, Data + sizeof(Data) - 50)).size(),
4183cab2bb3Spatrick             DataProv.ConsumeRemainingBytes<uint8_t>().size());
4193cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(0.0), DataProv.ConsumeProbability<float>());
4203cab2bb3Spatrick   ASSERT_NEAR(std::numeric_limits<double>::lowest(),
4213cab2bb3Spatrick               DataProv.ConsumeFloatingPoint<double>(), 1e-10);
4223cab2bb3Spatrick   ASSERT_FLOAT_EQ(float(123.0),
4233cab2bb3Spatrick                   DataProv.ConsumeFloatingPointInRange<float>(123.0, 777.0));
4243cab2bb3Spatrick   ASSERT_DOUBLE_EQ(double(-13.37), DataProv.ConsumeFloatingPointInRange<double>(
4253cab2bb3Spatrick                                        -13.37, 31.337));
4263cab2bb3Spatrick }
4273cab2bb3Spatrick 
TEST(FuzzedDataProvider,ConsumeData)4281f9cb04fSpatrick TEST(FuzzedDataProvider, ConsumeData) {
4291f9cb04fSpatrick   FuzzedDataProvider DataProv(Data, sizeof(Data));
4301f9cb04fSpatrick   uint8_t Buffer[10] = {};
4311f9cb04fSpatrick   EXPECT_EQ(sizeof(Buffer), DataProv.ConsumeData(Buffer, sizeof(Buffer)));
4321f9cb04fSpatrick   std::vector<uint8_t> Expected(Data, Data + sizeof(Buffer));
4331f9cb04fSpatrick   EXPECT_EQ(Expected, std::vector<uint8_t>(Buffer, Buffer + sizeof(Buffer)));
4341f9cb04fSpatrick 
4351f9cb04fSpatrick   EXPECT_EQ(size_t(2), DataProv.ConsumeData(Buffer, 2));
4361f9cb04fSpatrick   Expected[0] = Data[sizeof(Buffer)];
4371f9cb04fSpatrick   Expected[1] = Data[sizeof(Buffer) + 1];
4381f9cb04fSpatrick   EXPECT_EQ(Expected, std::vector<uint8_t>(Buffer, Buffer + sizeof(Buffer)));
4391f9cb04fSpatrick 
4401f9cb04fSpatrick   // Exhaust the buffer.
4411f9cb04fSpatrick   EXPECT_EQ(std::vector<uint8_t>(Data + 12, Data + sizeof(Data)),
4421f9cb04fSpatrick             DataProv.ConsumeRemainingBytes<uint8_t>());
4431f9cb04fSpatrick   EXPECT_EQ(size_t(0), DataProv.ConsumeData(Buffer, sizeof(Buffer)));
4441f9cb04fSpatrick   EXPECT_EQ(Expected, std::vector<uint8_t>(Buffer, Buffer + sizeof(Buffer)));
4451f9cb04fSpatrick }
4461f9cb04fSpatrick 
main(int argc,char ** argv)4473cab2bb3Spatrick int main(int argc, char **argv) {
4483cab2bb3Spatrick   testing::InitGoogleTest(&argc, argv);
4493cab2bb3Spatrick   return RUN_ALL_TESTS();
4503cab2bb3Spatrick }
451