/******************************************************************************* * This file is part of SWIFT. * Copyright (C) 2019 James Willis (james.s.willis@durham.ac.uk). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * ******************************************************************************/ /* Config parameters. */ #include /* System includes. */ #include /* Local headers. */ #include "swift.h" #define NUM_KEYS (26 * 1000 * 1000) int main(int argc, char *argv[]) { /* Initialize CPU frequency, this also starts time. */ unsigned long long cpufreq = 0; clocks_set_cpufreq(cpufreq); /* Choke on FPEs */ #ifdef HAVE_FE_ENABLE_EXCEPT feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW); #endif hashmap_t m; message("Initialising hash table..."); hashmap_init(&m); message("Populating hash table..."); for (hashmap_key_t key = 0; key < NUM_KEYS; key++) { hashmap_value_t value; value.value_st = (long long)key; hashmap_put(&m, key, value); } message("Dumping hashmap stats."); hashmap_print_stats(&m); message("Retrieving elements from the hash table..."); for (hashmap_key_t key = 0; key < NUM_KEYS; key++) { hashmap_value_t value = *hashmap_lookup(&m, key); if (value.value_st != (long long)key) error("Incorrect value (%lld) found for key: %lld", value.value_st, (long long)key); // else message("Retrieved element, Key: %zu Value: %zu", key, value); } message("Checking for invalid key..."); if (hashmap_lookup(&m, NUM_KEYS + 1) != NULL) error("Key: %d shouldn't exist or be created.", NUM_KEYS + 1); message("Checking hash table size..."); if (m.size != NUM_KEYS) error( "The no. of elements stored in the hash table are not equal to the no. " "of keys. No. of elements: %zu, no. of keys: %d", m.size, NUM_KEYS); message("Freeing hash table..."); hashmap_free(&m); }