9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch/***
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch This file is part of systemd
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch Copyright 2013 Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch systemd is free software; you can redistribute it and/or modify it
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch under the terms of the GNU Lesser General Public License as published by
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch the Free Software Foundation; either version 2.1 of the License, or
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch (at your option) any later version.
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch systemd is distributed in the hope that it will be useful, but
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch WITHOUT ANY WARRANTY; without even the implied warranty of
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch Lesser General Public License for more details.
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch You should have received a copy of the GNU Lesser General Public License
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch along with systemd; If not, see <http://www.gnu.org/licenses/>.
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch***/
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch#include "hashmap.h"
cf0fbc49e67b55f8d346fc94de28c90113505297Thomas Hindoe Paaboel Andersen#include "util.h"
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidtvoid test_hashmap_funcs(void);
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidtvoid test_ordered_hashmap_funcs(void);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidtstatic void test_ordered_hashmap_next(void) {
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt _cleanup_ordered_hashmap_free_ OrderedHashmap *m = NULL;
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt int i;
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt assert_se(m = ordered_hashmap_new(NULL));
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt for (i = -2; i <= 2; i++)
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt assert_se(ordered_hashmap_put(m, INT_TO_PTR(i), INT_TO_PTR(i+10)) == 1);
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt for (i = -2; i <= 1; i++)
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt assert_se(ordered_hashmap_next(m, INT_TO_PTR(i)) == INT_TO_PTR(i+11));
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt assert_se(!ordered_hashmap_next(m, INT_TO_PTR(2)));
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt assert_se(!ordered_hashmap_next(NULL, INT_TO_PTR(1)));
8f8a5213a9ad89f1ebab6efb19377ed9df512ee6Michal Schmidt assert_se(!ordered_hashmap_next(m, INT_TO_PTR(3)));
d06b3a9d70c6dee3371818931328e19876cc3259Ronny Chevalier}
d06b3a9d70c6dee3371818931328e19876cc3259Ronny Chevalier
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buchstatic void test_uint64_compare_func(void) {
8097ab4f0cf7a52ac6ca45cb2b2dfe4850a2dee5Zbigniew Jędrzejewski-Szmek const uint64_t a = 0x100, b = 0x101;
8097ab4f0cf7a52ac6ca45cb2b2dfe4850a2dee5Zbigniew Jędrzejewski-Szmek
8097ab4f0cf7a52ac6ca45cb2b2dfe4850a2dee5Zbigniew Jędrzejewski-Szmek assert_se(uint64_compare_func(&a, &a) == 0);
8097ab4f0cf7a52ac6ca45cb2b2dfe4850a2dee5Zbigniew Jędrzejewski-Szmek assert_se(uint64_compare_func(&a, &b) == -1);
8097ab4f0cf7a52ac6ca45cb2b2dfe4850a2dee5Zbigniew Jędrzejewski-Szmek assert_se(uint64_compare_func(&b, &a) == 1);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch}
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buchstatic void test_trivial_compare_func(void) {
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch assert_se(trivial_compare_func(INT_TO_PTR('a'), INT_TO_PTR('a')) == 0);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch assert_se(trivial_compare_func(INT_TO_PTR('a'), INT_TO_PTR('b')) == -1);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch assert_se(trivial_compare_func(INT_TO_PTR('b'), INT_TO_PTR('a')) == 1);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch}
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buchstatic void test_string_compare_func(void) {
4b3eff61640672bf0b19cb8cdd88ce5e84dcda1cDaniel Mack assert_se(string_compare_func("fred", "wilma") != 0);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch assert_se(string_compare_func("fred", "fred") == 0);
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch}
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch
45fa9e29f8c9759c8f2f4238fed956f695c73dc3Lennart Poetteringint main(int argc, const char *argv[]) {
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidt test_hashmap_funcs();
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidt test_ordered_hashmap_funcs();
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidt
32a4456cc252689f51f383d150d34ed636bfec4dMichal Schmidt test_ordered_hashmap_next();
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch test_uint64_compare_func();
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch test_trivial_compare_func();
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch test_string_compare_func();
9341a4a167f348fc42cdd6f7ac8763bf3a0c5911Daniel Buch}