int main(int argc, char *argv[]) { int s; if (((argv[1][0] == '-') || (argv[1][0] == '-')) && ((argv[1][1] == 'h') || (argv[1][1] == '?'))) { printf( "This program is to make 'signatures' of known c library calls for the dcc " "program. It needs as the first arg the name of a library file, and as the " "second arg, the name of the signature file to be generated.\n" ); exit(0); } if (argc <= 2) { printf("Usage: makedsig <libname> <signame>\nor makedsig -h for help\n"); exit(1); } if ((f = fopen(argv[1], "rb")) == NULL) { printf("Cannot read %s\n", argv[1]); exit(2); } if ((f2 = fopen(argv[2], "wb")) == NULL) { printf("Cannot write %s\n", argv[2]); exit(2); } fprintf(stderr, "Seed: "); scanf("%d", &s); srand(s); numKeys = readSyms(); /* Read the keys (symbols) */ printf("Num keys: %d; vertices: %d\n", numKeys, (int)(numKeys*C)); hashParams( /* Set the parameters for the hash table */ numKeys, /* The number of symbols */ PATLEN, /* The length of the pattern to be hashed */ 256, /* The character set of the pattern (0-FF) */ 0, /* Minimum pattern character value */ (int)(numKeys*C)); /* C is the sparseness of the graph. See Czech, Havas and Majewski for details */ /* The following two functions are in perfhlib.c */ map(); /* Perform the mapping. This will call getKey() repeatedly */ assign(); /* Generate the function g */ saveFile(); /* Save the resultant information */ fclose(f); fclose(f2); }
static void testBloomFilter() { HashParams hashParams(10); BloomFilter* bf = new BloomFilter(&hashParams, 1000); REQUIRE(bf->get(key1.data, key1.len) == false); REQUIRE(bf->get(key1.data, key1.len) == false); bf->set(key1.data, key1.len); REQUIRE(bf->get(key1.data, key1.len) == true); REQUIRE(bf->get(key2.data, key2.len) == false); bf->set(key2.data, key2.len); REQUIRE(bf->get(key2.data, key2.len) == true); REQUIRE(bf->get(key1.data, key1.len) == true); delete bf; }
static void testAgeBloomFilter() { HashParams hashParams(10); AgeBloomFilter* bf = new AgeBloomFilter(&hashParams, 1000); time_t now = time(NULL); time_t later = now + 10; REQUIRE(bf->get(key1.data, key1.len) == 0); REQUIRE(bf->get(key1.data, key1.len) == 0); bf->set(key1.data, key1.len, now); REQUIRE(bf->get(key1.data, key1.len) == now); REQUIRE(bf->get(key2.data, key2.len) == 0); bf->set(key2.data, key2.len, later); REQUIRE(bf->get(key2.data, key2.len) == later); REQUIRE(bf->get(key1.data, key1.len) == now); REQUIRE(bf->get(key2.data, key2.len) > bf->get(key1.data, key1.len)); delete bf; }
static void testCountBloomFilter() { HashParams hashParams(10); CountBloomFilter* bf = new CountBloomFilter(&hashParams, 1000); std::cout << "bf(key1) == " << bf->get(key1.data, key1.len) << std::endl; REQUIRE(bf->get(key1.data, key1.len) == 0); std::cout << "bf(key2) == " << bf->get(key2.data, key2.len) << std::endl; REQUIRE(bf->get(key2.data, key2.len) == 0); bf->set(key1.data, key1.len, 100); std::cout << "bf(key1) == " << bf->get(key1.data, key1.len) << std::endl; std::cout << "bf(key2) == " << bf->get(key2.data, key2.len) << std::endl; REQUIRE(bf->get(key1.data, key1.len) == 100); REQUIRE(bf->get(key2.data, key2.len) == 0); bf->set(key2.data, key2.len, 1000); std::cout << "bf(key1) == " << bf->get(key1.data, key1.len) << std::endl; std::cout << "bf(key2) == " << bf->get(key2.data, key2.len) << std::endl; REQUIRE(bf->get(key2.data, key2.len) == 1000); REQUIRE(bf->get(key1.data, key1.len) == 100); bf->set(key1.data, key1.len, 100); std::cout << "bf(key1) == " << bf->get(key1.data, key1.len) << std::endl; REQUIRE(bf->get(key1.data, key1.len) == 200); bf->set(key1.data, key1.len, -200); std::cout << "bf(key1) == " << bf->get(key1.data, key1.len) << std::endl; REQUIRE(bf->get(key1.data, key1.len) == 0); bf->set(key2.data, key1.len, -1000); std::cout << "bf(key2) == " << bf->get(key2.data, key2.len) << std::endl; REQUIRE(bf->get(key2.data, key2.len) == 0); delete bf; }