blob: 8527d3d914a3091167b34f504d7ebecc499e18ca [file] [log] [blame]
/*
* Copyright IBM Corporation, 2010
* Contributor: Aneesh Kumar K.v <aneesh.kumar@linux.vnet.ibm.com>
*
*
* 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* ---------------------------------------
*/
#include <stdio.h>
#include "gsh_list.h"
struct myteststruct {
int value;
struct glist_head glist;
};
struct glist_head mytestglist;
struct glist_head mytestglist_new;
static void print_glist(struct glist_head *head)
{
struct myteststruct *entry;
struct glist_head *glist;
glist_for_each(glist, head) {
entry = glist_entry(glist, struct myteststruct, glist);
printf("The value is %d\n", entry->value);
}
}
void basic_test(void)
{
struct myteststruct node1;
struct myteststruct node2;
struct myteststruct node3;
struct myteststruct node4;
struct myteststruct node1_new;
struct myteststruct node2_new;
glist_init(&mytestglist);
glist_init(&mytestglist_new);
node1.value = 10;
node2.value = 11;
node3.value = 12;
glist_add(&mytestglist, &node1.glist);
glist_add(&mytestglist, &node2.glist);
glist_add(&mytestglist, &node3.glist);
print_glist(&mytestglist);
printf("Now test tail add\n");
node4.value = 13;
glist_add_tail(&mytestglist, &node4.glist);
print_glist(&mytestglist);
printf("Delete test\n");
glist_del(&node2.glist);
print_glist(&mytestglist);
node1_new.value = 15;
node2_new.value = 16;
glist_add(&mytestglist_new, &node1_new.glist);
glist_add(&mytestglist_new, &node2_new.glist);
printf("Add the below two list\n");
printf("list1\n");
print_glist(&mytestglist);
printf("list2\n");
print_glist(&mytestglist_new);
glist_add_list_tail(&mytestglist, &mytestglist_new);
printf("combined list\n");
print_glist(&mytestglist);
}
void splice_tail_test(void)
{
struct myteststruct nodes[10];
int ix;
glist_init(&mytestglist);
glist_init(&mytestglist_new);
for (ix = 0; ix < 10; ++ix) {
struct myteststruct *node = &nodes[ix];
node->value = ix + 1;
/* add nodes 1-5 to mytestglist */
if (ix < 5) {
glist_add_tail(&mytestglist, &node->glist);
} else {
/* and 6-10 to mytestglist_new */
glist_add_tail(&mytestglist_new, &node->glist);
}
}
printf("List mytestglist should have nodes 1..5\n");
print_glist(&mytestglist);
printf("List mytestglist_new should have nodes 6..10\n");
print_glist(&mytestglist_new);
printf(
"Now after glist_splice_tail mytestglist should have all 10 nodes:\n");
glist_splice_tail(&mytestglist, &mytestglist_new);
print_glist(&mytestglist);
printf("And mytestglist_new no nodes:\n");
print_glist(&mytestglist_new);
}
int main(int argc, char *argv[])
{
basic_test();
splice_tail_test();
return 0;
}