/* * LListTest.cpp * * Copyright (C) 2015 by Sysmocom s.f.m.c. GmbH * * All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License * along with this program. If not, see . * */ #include "cxx_linuxlist.h" extern "C" { #include #include #include } #include struct TestElem { const char *str; LListHead list; TestElem(const char *s) : str(s), list(this) {}; }; static void test_linux_list() { LListHead elems, *pos, *tmp; TestElem elem1("number one"); TestElem elem2("number two"); TestElem elem3("number three"); int count = 0; printf("=== start %s ===\n", __func__); llist_add_tail(&elem1.list, &elems); llist_add_tail(&elem2.list, &elems); llist_add_tail(&elem3.list, &elems); llist_for_each(pos, &elems) { count += 1; printf(" %i -> %s\n", count, pos->entry()->str); } OSMO_ASSERT(count == 3); count = 0; llist_for_each_safe(pos, tmp, &elems) { count += 1; if (count == 2) llist_del(pos); printf(" %i -> %s\n", count, pos->entry()->str); } OSMO_ASSERT(count == 3); count = 0; llist_for_each(pos, &elems) { count += 1; OSMO_ASSERT(pos != &elem2.list); printf(" %i -> %s\n", count, pos->entry()->str); } OSMO_ASSERT(count == 2); printf("=== end %s ===\n", __func__); } int main(int argc, char **argv) { test_linux_list(); return EXIT_SUCCESS; }