110ed6818SMax Moroz // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
210ed6818SMax Moroz // See https://llvm.org/LICENSE.txt for license information.
310ed6818SMax Moroz // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
410ed6818SMax Moroz
510ed6818SMax Moroz #include "gtest/gtest.h"
610ed6818SMax Moroz #include <cstdint>
710ed6818SMax Moroz #include <cstdlib>
810ed6818SMax Moroz
9df3b465cSMax Moroz #include <fuzzer/FuzzedDataProvider.h>
1010ed6818SMax Moroz
1110ed6818SMax Moroz // The test is intentionally extensive, as behavior of |FuzzedDataProvider| must
1210ed6818SMax Moroz // not be broken, given than many fuzz targets depend on it. Changing the
1310ed6818SMax Moroz // behavior might invalidate existing corpora and make the fuzz targets using
1410ed6818SMax Moroz // |FuzzedDataProvider| to lose code coverage accumulated over time.
1510ed6818SMax Moroz
1610ed6818SMax Moroz /* A random 1KB buffer generated by:
1710ed6818SMax Moroz $ python -c "import os; print ',\n'.join([', '.join(['0x%02X' % ord(i) for i \
1810ed6818SMax Moroz in list(os.urandom(8))]) for _ in xrange(128)])"
1910ed6818SMax Moroz */
2010ed6818SMax Moroz const uint8_t Data[] = {
2110ed6818SMax Moroz 0x8A, 0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E, 0x9B, 0xAA, 0xF3, 0xDA,
2210ed6818SMax Moroz 0xAA, 0x88, 0xF2, 0x9B, 0x6C, 0xBA, 0xBE, 0xB1, 0xF2, 0xCF, 0x13, 0xB8,
2310ed6818SMax Moroz 0xAC, 0x1A, 0x7F, 0x1C, 0xC9, 0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3, 0xFD,
2410ed6818SMax Moroz 0xE3, 0x05, 0xA4, 0x03, 0x37, 0x49, 0x50, 0x4B, 0xBC, 0x39, 0xA2, 0x09,
2510ed6818SMax Moroz 0x6C, 0x2F, 0xAF, 0xD1, 0xB5, 0x47, 0xBF, 0x92, 0xBD, 0x79, 0xE5, 0xC5,
2610ed6818SMax Moroz 0x6E, 0x51, 0xA4, 0xED, 0xE9, 0xBD, 0x40, 0x4A, 0xFC, 0x25, 0x7A, 0x27,
2710ed6818SMax Moroz 0xC8, 0x92, 0xF7, 0x30, 0xDE, 0x40, 0x66, 0x66, 0xE8, 0x5F, 0x65, 0x39,
2810ed6818SMax Moroz 0x7E, 0x9E, 0x80, 0x2B, 0x01, 0x71, 0x2A, 0xFF, 0xD3, 0x0A, 0xAC, 0x6E,
2910ed6818SMax Moroz 0x49, 0x32, 0x79, 0x10, 0x6A, 0x6F, 0x97, 0x96, 0x70, 0x7E, 0x50, 0x65,
3010ed6818SMax Moroz 0xC9, 0x1D, 0xBD, 0x4E, 0x17, 0x04, 0x1E, 0xBA, 0x26, 0xAC, 0x1F, 0xE3,
3110ed6818SMax Moroz 0x37, 0x1C, 0x15, 0x43, 0x60, 0x41, 0x2A, 0x7C, 0xCA, 0x70, 0xCE, 0xAB,
3210ed6818SMax Moroz 0x20, 0x24, 0xF8, 0xD9, 0x1F, 0x14, 0x7C, 0x5C, 0xDD, 0x6F, 0xB3, 0xD7,
3310ed6818SMax Moroz 0x8B, 0x63, 0x10, 0xB7, 0xDA, 0x99, 0xAF, 0x99, 0x01, 0x21, 0xE6, 0xE1,
3410ed6818SMax Moroz 0x86, 0x27, 0xBE, 0x8D, 0xDF, 0x1E, 0xEA, 0x80, 0x0B, 0x8A, 0x60, 0xC3,
3510ed6818SMax Moroz 0x3A, 0x85, 0x33, 0x53, 0x59, 0xE1, 0xB5, 0xF1, 0x62, 0xA6, 0x7B, 0x24,
3610ed6818SMax Moroz 0x94, 0xE3, 0x8C, 0x10, 0x93, 0xF8, 0x6E, 0xC2, 0x00, 0x91, 0x90, 0x0B,
3710ed6818SMax Moroz 0x5D, 0x52, 0x4F, 0x21, 0xE3, 0x40, 0x3A, 0x6E, 0xB6, 0x32, 0x15, 0xDB,
3810ed6818SMax Moroz 0x5D, 0x01, 0x86, 0x63, 0x83, 0x24, 0xC5, 0xDE, 0xAB, 0x31, 0x84, 0xAA,
3910ed6818SMax Moroz 0xE5, 0x64, 0x02, 0x8D, 0x23, 0x82, 0x86, 0x14, 0x16, 0x18, 0x9F, 0x3D,
4010ed6818SMax Moroz 0x31, 0xBE, 0x3B, 0xF0, 0x6C, 0x26, 0x42, 0x9A, 0x67, 0xFE, 0x28, 0xEC,
4110ed6818SMax Moroz 0x28, 0xDB, 0x01, 0xB4, 0x52, 0x41, 0x81, 0x7C, 0x54, 0xD3, 0xC8, 0x00,
4210ed6818SMax Moroz 0x01, 0x66, 0xB0, 0x2C, 0x3F, 0xBC, 0xAF, 0xAC, 0x87, 0xCD, 0x83, 0xCF,
4310ed6818SMax Moroz 0x23, 0xFC, 0xC8, 0x97, 0x8C, 0x71, 0x32, 0x8B, 0xBF, 0x70, 0xC0, 0x48,
4410ed6818SMax Moroz 0x31, 0x92, 0x18, 0xFE, 0xE5, 0x33, 0x48, 0x82, 0x98, 0x1E, 0x30, 0xCC,
4510ed6818SMax Moroz 0xAD, 0x5D, 0x97, 0xC4, 0xB4, 0x39, 0x7C, 0xCD, 0x39, 0x44, 0xF1, 0xA9,
4610ed6818SMax Moroz 0xD0, 0xF4, 0x27, 0xB7, 0x78, 0x85, 0x9E, 0x72, 0xFC, 0xCC, 0xEE, 0x98,
4710ed6818SMax Moroz 0x25, 0x3B, 0x69, 0x6B, 0x0C, 0x11, 0xEA, 0x22, 0xB6, 0xD0, 0xCD, 0xBF,
4810ed6818SMax Moroz 0x6D, 0xBE, 0x12, 0xDE, 0xFE, 0x78, 0x2E, 0x54, 0xCB, 0xBA, 0xD7, 0x2E,
4910ed6818SMax Moroz 0x54, 0x25, 0x14, 0x84, 0xFE, 0x1A, 0x10, 0xCE, 0xCC, 0x20, 0xE6, 0xE2,
5010ed6818SMax Moroz 0x7F, 0xE0, 0x5F, 0xDB, 0xA7, 0xF3, 0xE2, 0x4C, 0x52, 0x82, 0xFC, 0x0B,
5110ed6818SMax Moroz 0xA0, 0xBD, 0x34, 0x21, 0xF7, 0xEB, 0x1C, 0x5B, 0x67, 0xD0, 0xAF, 0x22,
5210ed6818SMax Moroz 0x15, 0xA1, 0xFF, 0xC2, 0x68, 0x25, 0x5B, 0xB2, 0x13, 0x3F, 0xFF, 0x98,
5310ed6818SMax Moroz 0x53, 0x25, 0xC5, 0x58, 0x39, 0xD0, 0x43, 0x86, 0x6C, 0x5B, 0x57, 0x8E,
5410ed6818SMax Moroz 0x83, 0xBA, 0xB9, 0x09, 0x09, 0x14, 0x0C, 0x9E, 0x99, 0x83, 0x88, 0x53,
5510ed6818SMax Moroz 0x79, 0xFD, 0xF7, 0x49, 0xE9, 0x2C, 0xCE, 0xE6, 0x7B, 0xF5, 0xC2, 0x27,
5610ed6818SMax Moroz 0x5E, 0x56, 0xB5, 0xB4, 0x46, 0x90, 0x91, 0x7F, 0x99, 0x88, 0xA7, 0x23,
5710ed6818SMax Moroz 0xC1, 0x80, 0xB8, 0x2D, 0xCD, 0xF7, 0x6F, 0x9A, 0xEC, 0xBD, 0x16, 0x9F,
5810ed6818SMax Moroz 0x7D, 0x87, 0x1E, 0x15, 0x51, 0xC4, 0x96, 0xE2, 0xBF, 0x61, 0x66, 0xB5,
5910ed6818SMax Moroz 0xFD, 0x01, 0x67, 0xD6, 0xFF, 0xD2, 0x14, 0x20, 0x98, 0x8E, 0xEF, 0xF3,
6010ed6818SMax Moroz 0x22, 0xDB, 0x7E, 0xCE, 0x70, 0x2D, 0x4C, 0x06, 0x5A, 0xA0, 0x4F, 0xC8,
6110ed6818SMax Moroz 0xB0, 0x4D, 0xA6, 0x52, 0xB2, 0xD6, 0x2F, 0xD8, 0x57, 0xE5, 0xEF, 0xF9,
6210ed6818SMax Moroz 0xEE, 0x52, 0x0F, 0xEC, 0xC4, 0x90, 0x33, 0xAD, 0x25, 0xDA, 0xCD, 0x12,
6310ed6818SMax Moroz 0x44, 0x5F, 0x32, 0xF6, 0x6F, 0xEF, 0x85, 0xB8, 0xDC, 0x3C, 0x01, 0x48,
6410ed6818SMax Moroz 0x28, 0x5D, 0x2D, 0x9C, 0x9B, 0xC0, 0x49, 0x36, 0x1E, 0x6A, 0x0A, 0x0C,
6510ed6818SMax Moroz 0xB0, 0x6E, 0x81, 0x89, 0xCB, 0x0A, 0x89, 0xCF, 0x73, 0xC6, 0x63, 0x3D,
6610ed6818SMax Moroz 0x8E, 0x13, 0x57, 0x91, 0x4E, 0xA3, 0x93, 0x8C, 0x61, 0x67, 0xFD, 0x13,
6710ed6818SMax Moroz 0xE0, 0x14, 0x72, 0xB3, 0xE4, 0x23, 0x45, 0x08, 0x4E, 0x4E, 0xF5, 0xA7,
6810ed6818SMax Moroz 0xA8, 0xEE, 0x30, 0xFD, 0x81, 0x80, 0x1F, 0xF3, 0x4F, 0xD7, 0xE7, 0xF2,
6910ed6818SMax Moroz 0x16, 0xC0, 0xD6, 0x15, 0x6A, 0x0F, 0x89, 0x15, 0xA9, 0xCF, 0x35, 0x50,
7010ed6818SMax Moroz 0x6B, 0x49, 0x3E, 0x12, 0x4A, 0x72, 0xE4, 0x59, 0x9D, 0xD7, 0xDB, 0xD2,
7110ed6818SMax Moroz 0xD1, 0x61, 0x7D, 0x52, 0x4A, 0x36, 0xF6, 0xBA, 0x0E, 0xFA, 0x88, 0x6F,
7210ed6818SMax Moroz 0x3C, 0x82, 0x16, 0xF0, 0xD5, 0xED, 0x4D, 0x78, 0xEF, 0x38, 0x17, 0x90,
7310ed6818SMax Moroz 0xEA, 0x28, 0x32, 0xA9, 0x79, 0x40, 0xFF, 0xAA, 0xE6, 0xF5, 0xC7, 0x96,
7410ed6818SMax Moroz 0x56, 0x65, 0x61, 0x83, 0x3D, 0xBD, 0xD7, 0xED, 0xD6, 0xB6, 0xC0, 0xED,
7510ed6818SMax Moroz 0x34, 0xAA, 0x60, 0xA9, 0xE8, 0x82, 0x78, 0xEA, 0x69, 0xF6, 0x47, 0xAF,
7610ed6818SMax Moroz 0x39, 0xAB, 0x11, 0xDB, 0xE9, 0xFB, 0x68, 0x0C, 0xFE, 0xDF, 0x97, 0x9F,
7710ed6818SMax Moroz 0x3A, 0xF4, 0xF3, 0x32, 0x27, 0x30, 0x57, 0x0E, 0xF7, 0xB2, 0xEE, 0xFB,
7810ed6818SMax Moroz 0x1E, 0x98, 0xA8, 0xA3, 0x25, 0x45, 0xE4, 0x6D, 0x2D, 0xAE, 0xFE, 0xDA,
7910ed6818SMax Moroz 0xB3, 0x32, 0x9B, 0x5D, 0xF5, 0x32, 0x74, 0xEA, 0xE5, 0x02, 0x30, 0x53,
8010ed6818SMax Moroz 0x95, 0x13, 0x7A, 0x23, 0x1F, 0x10, 0x30, 0xEA, 0x78, 0xE4, 0x36, 0x1D,
8110ed6818SMax Moroz 0x92, 0x96, 0xB9, 0x91, 0x2D, 0xFA, 0x43, 0xAB, 0xE6, 0xEF, 0x14, 0x14,
8210ed6818SMax Moroz 0xC9, 0xBC, 0x46, 0xC6, 0x05, 0x7C, 0xC6, 0x11, 0x23, 0xCF, 0x3D, 0xC8,
8310ed6818SMax Moroz 0xBE, 0xEC, 0xA3, 0x58, 0x31, 0x55, 0x65, 0x14, 0xA7, 0x94, 0x93, 0xDD,
8410ed6818SMax Moroz 0x2D, 0x76, 0xC9, 0x66, 0x06, 0xBD, 0xF5, 0xE7, 0x30, 0x65, 0x42, 0x52,
8510ed6818SMax Moroz 0xA2, 0x50, 0x9B, 0xE6, 0x40, 0xA2, 0x4B, 0xEC, 0xA6, 0xB7, 0x39, 0xAA,
8610ed6818SMax Moroz 0xD7, 0x61, 0x2C, 0xBF, 0x37, 0x5A, 0xDA, 0xB3, 0x5D, 0x2F, 0x5D, 0x11,
8710ed6818SMax Moroz 0x82, 0x97, 0x32, 0x8A, 0xC1, 0xA1, 0x13, 0x20, 0x17, 0xBD, 0xA2, 0x91,
8810ed6818SMax Moroz 0x94, 0x2A, 0x4E, 0xBE, 0x3E, 0x77, 0x63, 0x67, 0x5C, 0x0A, 0xE1, 0x22,
8910ed6818SMax Moroz 0x0A, 0x4F, 0x63, 0xE2, 0x84, 0xE9, 0x9F, 0x14, 0x86, 0xE2, 0x4B, 0x20,
9010ed6818SMax Moroz 0x9F, 0x50, 0xB3, 0x56, 0xED, 0xDE, 0x39, 0xD8, 0x75, 0x64, 0x45, 0x54,
9110ed6818SMax Moroz 0xE5, 0x34, 0x57, 0x8C, 0x3B, 0xF2, 0x0E, 0x94, 0x1B, 0x10, 0xA2, 0xA2,
9210ed6818SMax Moroz 0x38, 0x76, 0x21, 0x8E, 0x2A, 0x57, 0x64, 0x58, 0x0A, 0x27, 0x6D, 0x4C,
9310ed6818SMax Moroz 0xD0, 0xB5, 0xC1, 0xFC, 0x75, 0xD0, 0x01, 0x86, 0x66, 0xA8, 0xF1, 0x98,
9410ed6818SMax Moroz 0x58, 0xFB, 0xFC, 0x64, 0xD2, 0x31, 0x77, 0xAD, 0x0E, 0x46, 0x87, 0xCC,
9510ed6818SMax Moroz 0x9B, 0x86, 0x90, 0xFF, 0xB6, 0x64, 0x35, 0xA5, 0x5D, 0x9E, 0x44, 0x51,
9610ed6818SMax Moroz 0x87, 0x9E, 0x1E, 0xEE, 0xF3, 0x3B, 0x5C, 0xDD, 0x94, 0x03, 0xAA, 0x18,
9710ed6818SMax Moroz 0x2C, 0xB7, 0xC4, 0x37, 0xD5, 0x53, 0x28, 0x60, 0xEF, 0x77, 0xEF, 0x3B,
9810ed6818SMax Moroz 0x9E, 0xD2, 0xCE, 0xE9, 0x53, 0x2D, 0xF5, 0x19, 0x7E, 0xBB, 0xB5, 0x46,
9910ed6818SMax Moroz 0xE2, 0xF7, 0xD6, 0x4D, 0x6D, 0x5B, 0x81, 0x56, 0x6B, 0x12, 0x55, 0x63,
10010ed6818SMax Moroz 0xC3, 0xAB, 0x08, 0xBB, 0x2E, 0xD5, 0x11, 0xBC, 0x18, 0xCB, 0x8B, 0x12,
10110ed6818SMax Moroz 0x2E, 0x3E, 0x75, 0x32, 0x98, 0x8A, 0xDE, 0x3C, 0xEA, 0x33, 0x46, 0xE7,
10210ed6818SMax Moroz 0x7A, 0xA5, 0x12, 0x09, 0x26, 0x7E, 0x7E, 0x03, 0x4F, 0xFD, 0xC0, 0xFD,
10310ed6818SMax Moroz 0xEA, 0x4F, 0x83, 0x85, 0x39, 0x62, 0xFB, 0xA2, 0x33, 0xD9, 0x2D, 0xB1,
10410ed6818SMax Moroz 0x30, 0x6F, 0x88, 0xAB, 0x61, 0xCB, 0x32, 0xEB, 0x30, 0xF9, 0x51, 0xF6,
10510ed6818SMax Moroz 0x1F, 0x3A, 0x11, 0x4D, 0xFD, 0x54, 0xD6, 0x3D, 0x43, 0x73, 0x39, 0x16,
10610ed6818SMax Moroz 0xCF, 0x3D, 0x29, 0x4A};
10710ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeBytes)10810ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeBytes) {
10910ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
110a0eb49c2SMax Moroz EXPECT_EQ(std::vector<unsigned char>(1, 0x8A),
111a0eb49c2SMax Moroz DataProv.ConsumeBytes<unsigned char>(1));
11210ed6818SMax Moroz EXPECT_EQ(std::vector<uint8_t>(
11310ed6818SMax Moroz {0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E, 0x9B, 0xAA, 0xF3}),
11410ed6818SMax Moroz DataProv.ConsumeBytes<uint8_t>(10));
11510ed6818SMax Moroz
116a0eb49c2SMax Moroz std::vector<unsigned char> UChars = DataProv.ConsumeBytes<unsigned char>(24);
11710ed6818SMax Moroz EXPECT_EQ(std::vector<unsigned char>({0xDA, 0xAA, 0x88, 0xF2, 0x9B, 0x6C,
11810ed6818SMax Moroz 0xBA, 0xBE, 0xB1, 0xF2, 0xCF, 0x13,
11910ed6818SMax Moroz 0xB8, 0xAC, 0x1A, 0x7F, 0x1C, 0xC9,
12010ed6818SMax Moroz 0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3}),
12110ed6818SMax Moroz UChars);
12210ed6818SMax Moroz
12310ed6818SMax Moroz EXPECT_EQ(std::vector<signed char>(Data + 1 + 10 + 24, Data + sizeof(Data)),
12410ed6818SMax Moroz DataProv.ConsumeBytes<signed char>(31337));
12510ed6818SMax Moroz }
12610ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeBytesWithTerminator)127a0eb49c2SMax Moroz TEST(FuzzedDataProvider, ConsumeBytesWithTerminator) {
128a0eb49c2SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
129a0eb49c2SMax Moroz EXPECT_EQ(std::vector<unsigned char>({0x8A, 0x00}),
130a0eb49c2SMax Moroz DataProv.ConsumeBytesWithTerminator<unsigned char>(1));
131a0eb49c2SMax Moroz EXPECT_EQ(std::vector<uint8_t>({0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E,
132a0eb49c2SMax Moroz 0x9B, 0xAA, 0xF3, 111}),
133a0eb49c2SMax Moroz DataProv.ConsumeBytesWithTerminator<uint8_t>(10, 111));
134a0eb49c2SMax Moroz
135a0eb49c2SMax Moroz std::vector<unsigned char> UChars =
136a0eb49c2SMax Moroz DataProv.ConsumeBytesWithTerminator<unsigned char>(24);
137a0eb49c2SMax Moroz EXPECT_EQ(std::vector<unsigned char>(
138a0eb49c2SMax Moroz {0xDA, 0xAA, 0x88, 0xF2, 0x9B, 0x6C, 0xBA, 0xBE, 0xB1,
139a0eb49c2SMax Moroz 0xF2, 0xCF, 0x13, 0xB8, 0xAC, 0x1A, 0x7F, 0x1C, 0xC9,
140a0eb49c2SMax Moroz 0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3, 0x00}),
141a0eb49c2SMax Moroz UChars);
142a0eb49c2SMax Moroz
143a0eb49c2SMax Moroz std::vector<signed char> Expected(Data + 1 + 10 + 24, Data + sizeof(Data));
144a0eb49c2SMax Moroz Expected.push_back(65);
145a0eb49c2SMax Moroz EXPECT_EQ(Expected,
146a0eb49c2SMax Moroz DataProv.ConsumeBytesWithTerminator<signed char>(31337, 65));
147a0eb49c2SMax Moroz }
148a0eb49c2SMax Moroz
TEST(FuzzedDataProvider,ConsumeBytesAsString)14910ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeBytesAsString) {
15010ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
15110ed6818SMax Moroz EXPECT_EQ(std::string("\x8A\x19\x0D\x44\x37\x0D\x38\x5E\x9B\xAA\xF3\xDA"),
15210ed6818SMax Moroz DataProv.ConsumeBytesAsString(12));
15310ed6818SMax Moroz EXPECT_EQ(std::string(Data + 12, Data + sizeof(Data)),
15410ed6818SMax Moroz DataProv.ConsumeBytesAsString(31337));
15510ed6818SMax Moroz }
15610ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeIntegralInRange)15710ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeIntegralInRange) {
15810ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
15910ed6818SMax Moroz EXPECT_EQ(int32_t(21), DataProv.ConsumeIntegralInRange<int32_t>(10, 30));
16010ed6818SMax Moroz EXPECT_EQ(int32_t(1337),
16110ed6818SMax Moroz DataProv.ConsumeIntegralInRange<int32_t>(1337, 1337));
16210ed6818SMax Moroz EXPECT_EQ(int8_t(-59), DataProv.ConsumeIntegralInRange<int8_t>(-100, 100));
16310ed6818SMax Moroz EXPECT_EQ(uint16_t(15823),
16410ed6818SMax Moroz DataProv.ConsumeIntegralInRange<uint16_t>(0, 65535));
16510ed6818SMax Moroz EXPECT_EQ((signed char)(-101),
16610ed6818SMax Moroz DataProv.ConsumeIntegralInRange<signed char>(-123, 123));
16710ed6818SMax Moroz EXPECT_EQ(int64_t(-53253077544), DataProv.ConsumeIntegralInRange<int64_t>(
16810ed6818SMax Moroz -99999999999, 99999999999));
16910ed6818SMax Moroz
17010ed6818SMax Moroz // Exhaust the buffer.
17110ed6818SMax Moroz auto String = DataProv.ConsumeBytesAsString(31337);
17210ed6818SMax Moroz EXPECT_EQ(size_t(1014), String.length());
17310ed6818SMax Moroz EXPECT_EQ(uint64_t(123456789),
17410ed6818SMax Moroz DataProv.ConsumeIntegralInRange<uint64_t>(123456789, 987654321));
17510ed6818SMax Moroz }
17610ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeRandomLengthString)17710ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeRandomLengthString) {
17810ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
17910ed6818SMax Moroz EXPECT_EQ(
18010ed6818SMax Moroz std::string(
18110ed6818SMax Moroz "\x8A\x19\x0D\x44\x37\x0D\x38\x5E\x9B\xAA\xF3\xDA\xAA\x88\xF2\x9B\x6C"
18210ed6818SMax Moroz "\xBA\xBE\xB1\xF2\xCF\x13\xB8\xAC\x1A\x7F\x1C\xC9\x90\xD0\xD9"),
18310ed6818SMax Moroz DataProv.ConsumeRandomLengthString(1337));
18410ed6818SMax Moroz EXPECT_EQ(std::string(
18510ed6818SMax Moroz "\xB3\xFD\xE3\x05\xA4\x03\x37\x49\x50\x4B\xBC\x39\xA2\x09\x6C"
18610ed6818SMax Moroz "\x2F\xAF\xD1\xB5\x47\xBF\x92\xBD\x79\xE5\xC5\x6E\x51\xA4\xED"
18710ed6818SMax Moroz "\xE9\xBD\x40\x4A\xFC\x25\x7A\x27\xC8\x92\xF7\x30\xDE\x40\x66"
18810ed6818SMax Moroz "\x66\xE8\x5F\x65\x39\x7E\x9E\x80\x2B\x01\x71\x2A\xFF\xD3\x0A"
18910ed6818SMax Moroz "\xAC\x6E\x49\x32\x79\x10\x6A\x6F\x97\x96\x70\x7E\x50\x65\xC9"
19010ed6818SMax Moroz "\x1D\xBD\x4E\x17\x04\x1E\xBA\x26\xAC\x1F\xE3\x37\x1C\x15\x43"
19110ed6818SMax Moroz "\x60\x41\x2A\x7C\xCA\x70\xCE\xAB\x20\x24\xF8\xD9\x1F\x14\x7C"),
19210ed6818SMax Moroz DataProv.ConsumeRandomLengthString(31337));
1932136d17dSMax Moroz size_t Offset = 141;
1942136d17dSMax Moroz EXPECT_EQ(std::string(Data + Offset, Data + Offset + 5),
19510ed6818SMax Moroz DataProv.ConsumeRandomLengthString(5));
1962136d17dSMax Moroz Offset += 5;
1972136d17dSMax Moroz EXPECT_EQ(std::string(Data + Offset, Data + Offset + 2),
19810ed6818SMax Moroz DataProv.ConsumeRandomLengthString(2));
1992136d17dSMax Moroz Offset += 2;
2002136d17dSMax Moroz
2012136d17dSMax Moroz // Call the overloaded method without arguments (uses max length available).
2022136d17dSMax Moroz EXPECT_EQ(std::string(Data + Offset, Data + Offset + 664),
2032136d17dSMax Moroz DataProv.ConsumeRandomLengthString());
2042136d17dSMax Moroz Offset += 664 + 2; // +2 because of '\' character followed by any other byte.
2052136d17dSMax Moroz
2062136d17dSMax Moroz EXPECT_EQ(std::string(Data + Offset, Data + Offset + 92),
2072136d17dSMax Moroz DataProv.ConsumeRandomLengthString());
2082136d17dSMax Moroz Offset += 92 + 2;
20910ed6818SMax Moroz
21010ed6818SMax Moroz // Exhaust the buffer.
21110ed6818SMax Moroz auto String = DataProv.ConsumeBytesAsString(31337);
2122136d17dSMax Moroz EXPECT_EQ(size_t(116), String.length());
21310ed6818SMax Moroz EXPECT_EQ(std::string(), DataProv.ConsumeRandomLengthString(1));
21410ed6818SMax Moroz }
21510ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeRemainingBytes)21610ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeRemainingBytes) {
21710ed6818SMax Moroz {
21810ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
21910ed6818SMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data, Data + sizeof(Data)),
220a0eb49c2SMax Moroz DataProv.ConsumeRemainingBytes<uint8_t>());
221a0eb49c2SMax Moroz EXPECT_EQ(std::vector<uint8_t>(),
222a0eb49c2SMax Moroz DataProv.ConsumeRemainingBytes<uint8_t>());
22310ed6818SMax Moroz }
22410ed6818SMax Moroz
22510ed6818SMax Moroz {
22610ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
22710ed6818SMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data, Data + 123),
228a0eb49c2SMax Moroz DataProv.ConsumeBytes<uint8_t>(123));
22910ed6818SMax Moroz EXPECT_EQ(std::vector<char>(Data + 123, Data + sizeof(Data)),
23010ed6818SMax Moroz DataProv.ConsumeRemainingBytes<char>());
23110ed6818SMax Moroz }
23210ed6818SMax Moroz }
23310ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeRemainingBytesAsString)23410ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeRemainingBytesAsString) {
23510ed6818SMax Moroz {
23610ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
23710ed6818SMax Moroz EXPECT_EQ(std::string(Data, Data + sizeof(Data)),
23810ed6818SMax Moroz DataProv.ConsumeRemainingBytesAsString());
23910ed6818SMax Moroz EXPECT_EQ(std::string(""), DataProv.ConsumeRemainingBytesAsString());
24010ed6818SMax Moroz }
24110ed6818SMax Moroz
24210ed6818SMax Moroz {
24310ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
24410ed6818SMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data, Data + 123),
245a0eb49c2SMax Moroz DataProv.ConsumeBytes<uint8_t>(123));
24610ed6818SMax Moroz EXPECT_EQ(std::string(Data + 123, Data + sizeof(Data)),
24710ed6818SMax Moroz DataProv.ConsumeRemainingBytesAsString());
24810ed6818SMax Moroz }
24910ed6818SMax Moroz }
25010ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeIntegral)25110ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeIntegral) {
25210ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
25310ed6818SMax Moroz EXPECT_EQ(int32_t(-903266865), DataProv.ConsumeIntegral<int32_t>());
25410ed6818SMax Moroz EXPECT_EQ(uint32_t(372863811), DataProv.ConsumeIntegral<uint32_t>());
25510ed6818SMax Moroz EXPECT_EQ(uint8_t(61), DataProv.ConsumeIntegral<uint8_t>());
25610ed6818SMax Moroz EXPECT_EQ(int16_t(22100), DataProv.ConsumeIntegral<int16_t>());
25710ed6818SMax Moroz EXPECT_EQ(uint64_t(18252263806144500217u),
25810ed6818SMax Moroz DataProv.ConsumeIntegral<uint64_t>());
25910ed6818SMax Moroz
26010ed6818SMax Moroz // Exhaust the buffer.
26110ed6818SMax Moroz auto String = DataProv.ConsumeBytesAsString(31337);
26210ed6818SMax Moroz EXPECT_EQ(size_t(1005), String.length());
26310ed6818SMax Moroz EXPECT_EQ(std::numeric_limits<int64_t>::min(),
26410ed6818SMax Moroz DataProv.ConsumeIntegral<int64_t>());
26510ed6818SMax Moroz }
26610ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeBool)26710ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeBool) {
26810ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
26910ed6818SMax Moroz EXPECT_EQ(false, DataProv.ConsumeBool());
27010ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27110ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27210ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27310ed6818SMax Moroz EXPECT_EQ(false, DataProv.ConsumeBool());
27410ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27510ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27610ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27710ed6818SMax Moroz EXPECT_EQ(true, DataProv.ConsumeBool());
27810ed6818SMax Moroz EXPECT_EQ(false, DataProv.ConsumeBool());
27910ed6818SMax Moroz
28010ed6818SMax Moroz // Exhaust the buffer.
28110ed6818SMax Moroz auto String = DataProv.ConsumeBytesAsString(31337);
28210ed6818SMax Moroz EXPECT_EQ(size_t(1014), String.length());
28310ed6818SMax Moroz EXPECT_EQ(false, DataProv.ConsumeBool());
28410ed6818SMax Moroz }
28510ed6818SMax Moroz
TEST(FuzzedDataProvider,PickValueInStdArray)286*70de7e0dSMax Moroz TEST(FuzzedDataProvider, PickValueInStdArray) {
287*70de7e0dSMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
288*70de7e0dSMax Moroz const std::array<int, 5> Array = {1, 2, 3, 4, 5};
289*70de7e0dSMax Moroz EXPECT_EQ(5, DataProv.PickValueInArray(Array));
290*70de7e0dSMax Moroz EXPECT_EQ(2, DataProv.PickValueInArray(Array));
291*70de7e0dSMax Moroz EXPECT_EQ(2, DataProv.PickValueInArray(Array));
292*70de7e0dSMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
293*70de7e0dSMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
294*70de7e0dSMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
295*70de7e0dSMax Moroz EXPECT_EQ(1, DataProv.PickValueInArray(Array));
296*70de7e0dSMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
297*70de7e0dSMax Moroz EXPECT_EQ(2, DataProv.PickValueInArray(Array));
298*70de7e0dSMax Moroz }
299*70de7e0dSMax Moroz
TEST(FuzzedDataProvider,PickValueInArray)30010ed6818SMax Moroz TEST(FuzzedDataProvider, PickValueInArray) {
30110ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
30210ed6818SMax Moroz const int Array[] = {1, 2, 3, 4, 5};
30310ed6818SMax Moroz EXPECT_EQ(5, DataProv.PickValueInArray(Array));
30410ed6818SMax Moroz EXPECT_EQ(2, DataProv.PickValueInArray(Array));
30510ed6818SMax Moroz EXPECT_EQ(2, DataProv.PickValueInArray(Array));
30610ed6818SMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
30710ed6818SMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
30810ed6818SMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
30910ed6818SMax Moroz EXPECT_EQ(1, DataProv.PickValueInArray(Array));
31010ed6818SMax Moroz EXPECT_EQ(3, DataProv.PickValueInArray(Array));
31110ed6818SMax Moroz EXPECT_EQ(2, DataProv.PickValueInArray(Array));
31210ed6818SMax Moroz
31310ed6818SMax Moroz EXPECT_EQ(uint8_t(0x9D), DataProv.PickValueInArray(Data));
31410ed6818SMax Moroz EXPECT_EQ(uint8_t(0xBA), DataProv.PickValueInArray(Data));
31510ed6818SMax Moroz EXPECT_EQ(uint8_t(0x69), DataProv.PickValueInArray(Data));
31610ed6818SMax Moroz EXPECT_EQ(uint8_t(0xD6), DataProv.PickValueInArray(Data));
31710ed6818SMax Moroz
318a0eb49c2SMax Moroz EXPECT_EQ(uint32_t(777), DataProv.PickValueInArray<uint32_t>({1337, 777}));
319a0eb49c2SMax Moroz EXPECT_EQ(uint32_t(777), DataProv.PickValueInArray<uint32_t>({1337, 777}));
320a0eb49c2SMax Moroz EXPECT_EQ(uint64_t(1337), DataProv.PickValueInArray<uint64_t>({1337, 777}));
321a0eb49c2SMax Moroz EXPECT_EQ(size_t(777), DataProv.PickValueInArray<size_t>({1337, 777}));
322a0eb49c2SMax Moroz EXPECT_EQ(int16_t(1337), DataProv.PickValueInArray<int16_t>({1337, 777}));
323a0eb49c2SMax Moroz EXPECT_EQ(int32_t(777), DataProv.PickValueInArray<int32_t>({1337, 777}));
324a0eb49c2SMax Moroz EXPECT_EQ(int64_t(777), DataProv.PickValueInArray<int64_t>({1337, 777}));
325a0eb49c2SMax Moroz
32610ed6818SMax Moroz // Exhaust the buffer.
32710ed6818SMax Moroz auto String = DataProv.ConsumeBytesAsString(31337);
328a0eb49c2SMax Moroz EXPECT_EQ(size_t(1000), String.length());
32910ed6818SMax Moroz EXPECT_EQ(uint8_t(0x8A), DataProv.PickValueInArray(Data));
33010ed6818SMax Moroz }
33110ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeEnum)33210ed6818SMax Moroz TEST(FuzzedDataProvider, ConsumeEnum) {
33310ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
33410ed6818SMax Moroz enum class Enum {
33510ed6818SMax Moroz Zero,
33610ed6818SMax Moroz One,
33710ed6818SMax Moroz Two,
33810ed6818SMax Moroz Three,
33910ed6818SMax Moroz Four,
34010ed6818SMax Moroz Five,
34110ed6818SMax Moroz Six,
34210ed6818SMax Moroz Seven,
34310ed6818SMax Moroz kMaxValue = Seven
34410ed6818SMax Moroz };
34510ed6818SMax Moroz EXPECT_EQ(Enum::Two, DataProv.ConsumeEnum<Enum>());
34610ed6818SMax Moroz EXPECT_EQ(Enum::One, DataProv.ConsumeEnum<Enum>());
34710ed6818SMax Moroz EXPECT_EQ(Enum::Five, DataProv.ConsumeEnum<Enum>());
34810ed6818SMax Moroz EXPECT_EQ(Enum::Seven, DataProv.ConsumeEnum<Enum>());
34910ed6818SMax Moroz EXPECT_EQ(Enum::Six, DataProv.ConsumeEnum<Enum>());
35010ed6818SMax Moroz EXPECT_EQ(Enum::One, DataProv.ConsumeEnum<Enum>());
35110ed6818SMax Moroz EXPECT_EQ(Enum::Three, DataProv.ConsumeEnum<Enum>());
35210ed6818SMax Moroz EXPECT_EQ(Enum::Three, DataProv.ConsumeEnum<Enum>());
35310ed6818SMax Moroz EXPECT_EQ(Enum::Five, DataProv.ConsumeEnum<Enum>());
35410ed6818SMax Moroz EXPECT_EQ(Enum::Six, DataProv.ConsumeEnum<Enum>());
35510ed6818SMax Moroz
35610ed6818SMax Moroz // Exhaust the buffer.
35710ed6818SMax Moroz auto String = DataProv.ConsumeBytesAsString(31337);
35810ed6818SMax Moroz EXPECT_EQ(size_t(1014), String.length());
35910ed6818SMax Moroz EXPECT_EQ(Enum::Zero, DataProv.ConsumeEnum<Enum>());
36010ed6818SMax Moroz }
36110ed6818SMax Moroz
TEST(FuzzedDataProvider,remaining_bytes)36210ed6818SMax Moroz TEST(FuzzedDataProvider, remaining_bytes) {
36310ed6818SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
36410ed6818SMax Moroz EXPECT_EQ(size_t(1024), DataProv.remaining_bytes());
36510ed6818SMax Moroz EXPECT_EQ(false, DataProv.ConsumeBool());
36610ed6818SMax Moroz EXPECT_EQ(size_t(1024 - 1), DataProv.remaining_bytes());
367a0eb49c2SMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data, Data + 8),
368a0eb49c2SMax Moroz DataProv.ConsumeBytes<uint8_t>(8));
36910ed6818SMax Moroz EXPECT_EQ(size_t(1024 - 1 - 8), DataProv.remaining_bytes());
37010ed6818SMax Moroz
37110ed6818SMax Moroz // Exhaust the buffer.
37210ed6818SMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data + 8, Data + sizeof(Data) - 1),
373a0eb49c2SMax Moroz DataProv.ConsumeRemainingBytes<uint8_t>());
37410ed6818SMax Moroz EXPECT_EQ(size_t(0), DataProv.remaining_bytes());
37510ed6818SMax Moroz }
37610ed6818SMax Moroz
TEST(FuzzedDataProvider,ConsumeProbability)377df3b465cSMax Moroz TEST(FuzzedDataProvider, ConsumeProbability) {
378df3b465cSMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
379df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(0.28969181), DataProv.ConsumeProbability<float>());
380df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(0.086814121166605432),
381df3b465cSMax Moroz DataProv.ConsumeProbability<double>());
382df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(0.30104411), DataProv.ConsumeProbability<float>());
383df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(0.96218831486039413),
384df3b465cSMax Moroz DataProv.ConsumeProbability<double>());
385df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(0.67005056), DataProv.ConsumeProbability<float>());
386df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(0.69210584173832279),
387df3b465cSMax Moroz DataProv.ConsumeProbability<double>());
388df3b465cSMax Moroz
389df3b465cSMax Moroz // Exhaust the buffer.
390df3b465cSMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data, Data + sizeof(Data) - 36),
391df3b465cSMax Moroz DataProv.ConsumeRemainingBytes<uint8_t>());
392df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(0.0), DataProv.ConsumeProbability<float>());
393df3b465cSMax Moroz }
394df3b465cSMax Moroz
TEST(FuzzedDataProvider,ConsumeFloatingPoint)395df3b465cSMax Moroz TEST(FuzzedDataProvider, ConsumeFloatingPoint) {
396df3b465cSMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
397df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(-2.8546307e+38),
398df3b465cSMax Moroz DataProv.ConsumeFloatingPoint<float>());
399df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(8.0940194040236032e+307),
400df3b465cSMax Moroz DataProv.ConsumeFloatingPoint<double>());
401df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(271.49084),
402df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<float>(123.0, 777.0));
403df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(30.859126145478349),
404df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<double>(13.37, 31.337));
405df3b465cSMax Moroz ASSERT_FLOAT_EQ(
406df3b465cSMax Moroz float(-903.47729),
407df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<float>(-999.9999, -777.77));
408df3b465cSMax Moroz ASSERT_DOUBLE_EQ(
409df3b465cSMax Moroz double(24.561393182922771),
410df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<double>(-13.37, 31.337));
411df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(1.0),
412df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<float>(1.0, 1.0));
413df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(-1.0),
414df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<double>(-1.0, -1.0));
415df3b465cSMax Moroz
416df3b465cSMax Moroz // Exhaust the buffer.
417df3b465cSMax Moroz EXPECT_EQ((std::vector<uint8_t>(Data, Data + sizeof(Data) - 50)).size(),
418df3b465cSMax Moroz DataProv.ConsumeRemainingBytes<uint8_t>().size());
419df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(0.0), DataProv.ConsumeProbability<float>());
420df3b465cSMax Moroz ASSERT_NEAR(std::numeric_limits<double>::lowest(),
421df3b465cSMax Moroz DataProv.ConsumeFloatingPoint<double>(), 1e-10);
422df3b465cSMax Moroz ASSERT_FLOAT_EQ(float(123.0),
423df3b465cSMax Moroz DataProv.ConsumeFloatingPointInRange<float>(123.0, 777.0));
424df3b465cSMax Moroz ASSERT_DOUBLE_EQ(double(-13.37), DataProv.ConsumeFloatingPointInRange<double>(
425df3b465cSMax Moroz -13.37, 31.337));
426df3b465cSMax Moroz }
427df3b465cSMax Moroz
TEST(FuzzedDataProvider,ConsumeData)42820a604d3SMax Moroz TEST(FuzzedDataProvider, ConsumeData) {
42920a604d3SMax Moroz FuzzedDataProvider DataProv(Data, sizeof(Data));
43020a604d3SMax Moroz uint8_t Buffer[10] = {};
43120a604d3SMax Moroz EXPECT_EQ(sizeof(Buffer), DataProv.ConsumeData(Buffer, sizeof(Buffer)));
43220a604d3SMax Moroz std::vector<uint8_t> Expected(Data, Data + sizeof(Buffer));
43320a604d3SMax Moroz EXPECT_EQ(Expected, std::vector<uint8_t>(Buffer, Buffer + sizeof(Buffer)));
43420a604d3SMax Moroz
43520a604d3SMax Moroz EXPECT_EQ(size_t(2), DataProv.ConsumeData(Buffer, 2));
43620a604d3SMax Moroz Expected[0] = Data[sizeof(Buffer)];
43720a604d3SMax Moroz Expected[1] = Data[sizeof(Buffer) + 1];
43820a604d3SMax Moroz EXPECT_EQ(Expected, std::vector<uint8_t>(Buffer, Buffer + sizeof(Buffer)));
43920a604d3SMax Moroz
44020a604d3SMax Moroz // Exhaust the buffer.
44120a604d3SMax Moroz EXPECT_EQ(std::vector<uint8_t>(Data + 12, Data + sizeof(Data)),
44220a604d3SMax Moroz DataProv.ConsumeRemainingBytes<uint8_t>());
44320a604d3SMax Moroz EXPECT_EQ(size_t(0), DataProv.ConsumeData(Buffer, sizeof(Buffer)));
44420a604d3SMax Moroz EXPECT_EQ(Expected, std::vector<uint8_t>(Buffer, Buffer + sizeof(Buffer)));
44520a604d3SMax Moroz }
44620a604d3SMax Moroz
main(int argc,char ** argv)44710ed6818SMax Moroz int main(int argc, char **argv) {
44810ed6818SMax Moroz testing::InitGoogleTest(&argc, argv);
44910ed6818SMax Moroz return RUN_ALL_TESTS();
45010ed6818SMax Moroz }
451