Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- // MAKE SURE TO HAVE THESE FILES AS WELL AS map.c IN THE CURRENT FOLDER AND THAT YOUR COMPILE THE TESTER WITH YOUR map.c
- // THEN SIMPLY RUN THE EXECUTABLE
- #include "test_utilities.h"
- #include "map.h"
- bool testMapCreate() {
- printf("Testing mapCreate\n");
- Map map1 = mapCreate();
- Map map2 = mapCreate();
- Map map3 = mapCreate();
- mapDestroy(map3);
- ASSERT_TEST(map1 != NULL);
- ASSERT_TEST(map2 != NULL);
- ASSERT_TEST(mapGetSize(map1) == 0);
- ASSERT_TEST(mapGetFirst(map1) == NULL);
- mapPut(map1, "mary", "poppins");
- mapDestroy(map1);
- map1 = NULL;
- mapDestroy(map1);
- ASSERT_TEST(mapGet(map1, "mary") == NULL);
- ASSERT_TEST(mapGetSize(map1) == -1);
- ASSERT_TEST(map2 != NULL);
- mapDestroy(map2);
- return true;
- }
- bool testMapPutGet() {
- printf("Testing mapPut, mapGet and mapGetSize\n");
- Map map = mapCreate();
- const char *key1 = "key1";
- const char *key2 = "key2";
- const char *key3 = "key3";
- int count = 0;
- printf("Verify putting keys\n");
- ASSERT_TEST(mapPut(map, key1, "value1") == MAP_SUCCESS);
- count++;
- ASSERT_TEST(mapPut(map, key2, "value2") == MAP_SUCCESS);
- count++;
- ASSERT_TEST(mapPut(map, key3, "value3") == MAP_SUCCESS);
- count++;
- printf("Verify sizes change correctly\n");
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(mapPut(map, key3, "value4") == MAP_SUCCESS);
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(mapRemove(map, key2) == MAP_SUCCESS);
- count--;
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(mapRemove(map, key1) == MAP_SUCCESS);
- count--;
- ASSERT_TEST(mapRemove(map, key3) == MAP_SUCCESS);
- count--;
- ASSERT_TEST(mapPut(map, key3, "value1") == MAP_SUCCESS);
- count++;
- printf("Verify `PUT` with NULL arguments\n");
- ASSERT_TEST(mapPut(map, key3, NULL) == MAP_NULL_ARGUMENT);
- ASSERT_TEST(mapPut(map, NULL, "value3") == MAP_NULL_ARGUMENT);
- ASSERT_TEST(mapPut(map, NULL, NULL) == MAP_NULL_ARGUMENT);
- ASSERT_TEST(mapPut(NULL, key3, "value3") == MAP_NULL_ARGUMENT);
- ASSERT_TEST(mapPut(NULL, NULL, NULL) == MAP_NULL_ARGUMENT);
- ASSERT_TEST(mapGetSize(map) == count);
- printf("Make sure added key has the correct value\n");
- ASSERT_TEST(mapPut(map, key1, "value2") == MAP_SUCCESS);
- count++;
- ASSERT_TEST(strcmp(mapGet(map, key1), "value2") == 0);
- printf("Verify value of key changed\n");
- ASSERT_TEST(mapPut(map, key1, "value1") == MAP_SUCCESS);
- ASSERT_TEST(strcmp(mapGet(map, key1), "value1") == 0);
- ASSERT_TEST(mapRemove(map, key1) == MAP_SUCCESS);
- count--;
- printf("Verify key doesn't exist\n");
- ASSERT_TEST(mapGet(map, key1) == NULL);
- printf("Verify string value is duplicated on PUT\n");
- const char *value1 = "value1";
- ASSERT_TEST(mapPut(map, key1, value1) == MAP_SUCCESS);
- count++;
- ASSERT_TEST(mapGet(map, key1) != value1);
- ASSERT_TEST(mapGetSize(map) == count);
- printf("Verify string isn't duplicated on GET\n");
- ASSERT_TEST(mapGet(map, key1) == mapGet(map, key1));
- printf("Verify override lookup by value and not by address\n");
- ASSERT_TEST(mapPut(map, "key1", value1) == MAP_SUCCESS);
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(strcmp(mapGet(map, key1), value1) == 0);
- printf("Testing emptry strings\n");
- ASSERT_TEST(mapPut(map, key1, "") == MAP_SUCCESS);
- ASSERT_TEST(mapPut(map, key2, "") == MAP_SUCCESS);
- count++;
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(mapPut(map, "", value1) == MAP_SUCCESS);
- count++;
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(strcmp(mapGet(map, ""), value1) == 0);
- ASSERT_TEST(strcmp(mapGet(map, key1), "") == 0);
- printf("Test a super long string\n");
- const char *super_long_string =
- "Hi— I’m Ted Mosby. And exactly 45 days from now you and I are "
- "going to meet and we’re going to fall in love and we’re going to "
- "get married and we’re going to have 2 kids and we’re going to "
- "love them and each other so much. All that is 45 days away, but "
- "I’m here now I guess because… I want those extra 45 days with "
- "you. I want each one of them. Look and if I can’t have them I’ll "
- "take the 45 seconds before your boyfriend shows up and punches me "
- "in the face, because… I love you. I’m always gonna love you, til "
- "the end of my days and beyond. You’ll see.Hi— I’m Ted Mosby. And "
- "exactly 45 days from now you and I are "
- "going to meet and we’re going to fall in love and we’re going to "
- "get married and we’re going to have 2 kids and we’re going to "
- "love them and each other so much. All that is 45 days away, but "
- "I’m here now I guess because… I want those extra 45 days with "
- "you. I want each one of them. Look and if I can’t have them I’ll "
- "take the 45 seconds before your boyfriend shows up and punches me "
- "in the face, because… I love you. I’m always gonna love you, til "
- "the end of my days and beyond. You’ll see.Hi— I’m Ted Mosby. And "
- "exactly 45 days from now you and I are "
- "going to meet and we’re going to fall in love and we’re going to "
- "get married and we’re going to have 2 kids and we’re going to "
- "love them and each other so much. All that is 45 days away, but "
- "I’m here now I guess because… I want those extra 45 days with "
- "you. I want each one of them. Look and if I can’t have them I’ll "
- "take the 45 seconds before your boyfriend shows up and punches me "
- "in the face, because… I love you. I’m always gonna love you, til "
- "the end of my days and beyond. You’ll see.Hi— I’m Ted Mosby. And "
- "exactly 45 days from now you and I are "
- "going to meet and we’re going to fall in love and we’re going to "
- "get married and we’re going to have 2 kids and we’re going to "
- "love them and each other so much. All that is 45 days away, but "
- "I’m here now I guess because… I want those extra 45 days with "
- "you. I want each one of them. Look and if I can’t have them I’ll "
- "take the 45 seconds before your boyfriend shows up and punches me "
- "in the face, because… I love you. I’m always gonna love you, til "
- "the end of my days and beyond. You’ll see.Hi— I’m Ted Mosby. And "
- "exactly 45 days from now you and I are "
- "going to meet and we’re going to fall in love and we’re going to "
- "get married and we’re going to have 2 kids and we’re going to "
- "love them and each other so much. All that is 45 days away, but "
- "I’m here now I guess because… I want those extra 45 days with "
- "you. I want each one of them. Look and if I can’t have them I’ll "
- "take the 45 seconds before your boyfriend shows up and punches me "
- "in the face, because… I love you. I’m always gonna love you, til "
- "the end of my days and beyond. You’ll see.";
- ASSERT_TEST(mapPut(map, key1, super_long_string) == MAP_SUCCESS);
- ASSERT_TEST(strcmp(mapGet(map, key1), super_long_string) == 0);
- ASSERT_TEST(mapPut(map, super_long_string, value1) == MAP_SUCCESS);
- ASSERT_TEST(strcmp(mapGet(map, super_long_string), value1) == 0);
- count++;
- ASSERT_TEST(strcmp(mapGet(map, super_long_string), value1) == 0);
- ASSERT_TEST(mapGetSize(map) == count);
- ASSERT_TEST(strcmp(mapGet(map, key2), "") == 0);
- mapDestroy(map);
- printf(
- "Destroy the list without removing all the keys. To let valgrind catch "
- "de-allocation errors\n");
- return true;
- }
- bool testMapCopy() {
- printf("Test mapCopy function\n");
- ASSERT_TEST(mapCopy(NULL) == NULL);
- Map map1 = mapCreate();
- ASSERT_TEST(mapPut(map1, "key1", "value1") == MAP_SUCCESS);
- ASSERT_TEST(mapPut(map1, "key2", "value2") == MAP_SUCCESS);
- Map map2 = mapCopy(map1);
- ASSERT_TEST(strcmp(mapGet(map2, "key1"), mapGet(map1, "key1")) == 0);
- ASSERT_TEST(strcmp(mapGet(map2, "key2"), mapGet(map1, "key2")) == 0);
- printf("Verify size are the same\n");
- ASSERT_TEST(mapGetSize(map2) == mapGetSize(map1));
- printf("Verify mapCopy duplicated the strings\n");
- ASSERT_TEST(mapGet(map2, "key2") != mapGet(map1, "key2"));
- ASSERT_TEST(mapRemove(map1, "key1") == MAP_SUCCESS);
- // Try re-allocating the same memory so it will change
- ASSERT_TEST(mapPut(map1, "key4", "value1") == MAP_SUCCESS);
- ASSERT_TEST(mapPut(map1, "key5", "value1") == MAP_SUCCESS);
- ASSERT_TEST(mapPut(map1, "key6", "value1") == MAP_SUCCESS);
- ASSERT_TEST(mapPut(map1, "key7", "value1") == MAP_SUCCESS);
- ASSERT_TEST(mapGet(map2, "key2") != NULL);
- mapDestroy(map1);
- ASSERT_TEST(strcmp(mapGet(map2, "key1"), "value1") == 0);
- ASSERT_TEST(strcmp(mapGet(map2, "key2"), "value2") == 0);
- mapDestroy(map2);
- return true;
- }
- bool testMapGetSize() {
- Map map = mapCreate();
- ASSERT_TEST(mapGetSize(map) == 0);
- ASSERT_TEST(mapPut(map, "key1", "value1") == MAP_SUCCESS);
- ASSERT_TEST(mapPut(map, "key1", "value2") == MAP_SUCCESS);
- ASSERT_TEST(mapGetSize(map) == 1);
- ASSERT_TEST(mapRemove(map, "key1") == MAP_SUCCESS);
- ASSERT_TEST(mapGetSize(map) == 0);
- ASSERT_TEST(mapGetSize(NULL) == -1);
- mapDestroy(map);
- return true;
- }
- bool testMapContains() {
- Map map1 = mapCreate();
- mapPut(map1, "key1", "value1");
- ASSERT_TEST(mapContains(map1, "key1") == true);
- ASSERT_TEST(mapContains(NULL, "key1") == false);
- ASSERT_TEST(mapContains(map1, NULL) == false);
- ASSERT_TEST(mapContains(map1, "dani") == false);
- mapDestroy(map1);
- return true;
- }
- bool testMapRemove() {
- Map map1 = mapCreate();
- mapPut(map1, "key1", "value1");
- mapPut(map1, "key2", "value2");
- mapPut(map1, "key3", "value3");
- mapRemove(map1, "key1");
- ASSERT_TEST(mapContains(map1, "key1") == false);
- ASSERT_TEST(mapGetSize(map1) == 2);
- mapPut(map1, "key1", "value1");
- mapRemove(map1, "key3");
- ASSERT_TEST(mapContains(map1, "key3") == false);
- ASSERT_TEST(mapGetSize(map1) == 2);
- mapPut(map1, "key3", "value3");
- mapRemove(map1, "key3");
- ASSERT_TEST(mapContains(map1, "key3") == false);
- ASSERT_TEST(mapGetSize(map1) == 2);
- mapDestroy(map1);
- return true;
- }
- char *randString(int length) {
- char *string =
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.-#'?!";
- size_t string_len = strlen(string);
- char *random_string = NULL;
- if (length < 1) {
- length = 1;
- }
- random_string = malloc(sizeof(char) * (length + 1));
- if (random_string == NULL) {
- return NULL;
- }
- short key = 0;
- for (int n = 0; n < length; n++) {
- key = rand() % string_len;
- random_string[n] = string[key];
- }
- random_string[length] = '\0';
- return random_string;
- }
- bool doomsDay() {
- Map map = mapCreate();
- const int repeat = 10000;
- const int length = 7;
- char *arr[repeat];
- static int my_seed = 25011984;
- srand(time(NULL) * length + ++my_seed);
- char *str;
- for (int i = 0; i < repeat; i++) {
- str = randString(length);
- arr[i] = str;
- ASSERT_TEST(mapPut(map, str, str) == MAP_SUCCESS);
- }
- ASSERT_TEST(mapGetSize(map) == repeat);
- for (int i = 1; i <= repeat; i++) {
- ASSERT_TEST(strcmp(mapGet(map, arr[repeat - i]), arr[repeat - i]) == 0);
- ASSERT_TEST(mapRemove(map, arr[repeat - i]) == MAP_SUCCESS);
- free(arr[repeat - i]);
- }
- mapDestroy(map);
- return true;
- }
- int main(int argc, char *argv[]) {
- printf("Start Map Tests\n");
- testMapPutGet();
- testMapCopy();
- testMapGetSize();
- testMapCreate();
- testMapContains();
- testMapRemove();
- doomsDay();
- printf("end Map Tests\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement