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