/*
 * Copyright (C) 2011 Michael Brown <mbrown@fensystems.co.uk>.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or 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 General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA.
 *
 * You can also choose to distribute this program under the terms of
 * the Unmodified Binary Distribution Licence (as given in the file
 * COPYING.UBDL), provided that you have satisfied its requirements.
 */

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );

/** @file
 *
 * List function tests
 *
 */

/* Forcibly enable assertions for list_check() */
#undef NDEBUG

#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <ipxe/list.h>
#include <ipxe/test.h>

/** A list test structure */
struct list_test {
	/** List element */
	struct list_head list;
	/** Label */
	char label;
};

/** List test elements */
static struct list_test list_tests[] = {
	{ .label = '0' },
	{ .label = '1' },
	{ .label = '2' },
	{ .label = '3' },
	{ .label = '4' },
	{ .label = '5' },
	{ .label = '6' },
	{ .label = '7' },
	{ .label = '8' },
	{ .label = '9' },
};

/** Test list */
static LIST_HEAD ( test_list );

/**
 * Check list contents are as expected
 *
 * @v list		Test list
 * @v expected		Expected contents
 * @v ok		List contents are as expected
 */
static int list_check_contents ( struct list_head *list,
				 const char *expected ) {
	struct list_test *entry;
	size_t num_entries = 0;

	/* Determine size of list */
	list_for_each_entry ( entry, list, list )
		num_entries++;

	{
		char found[ num_entries + 1 ];
		char found_rev[ num_entries + 1 ];
		char *tmp;

		/* Build up list content string */
		tmp = found;
		list_for_each_entry ( entry, list, list )
			*(tmp++) = entry->label;
		*tmp = '\0';

		/* Sanity check reversed list */
		tmp = &found_rev[ sizeof ( found_rev ) - 1 ];
		*tmp = '\0';
		list_for_each_entry_reverse ( entry, list, list )
			*(--tmp) = entry->label;
		if ( strcmp ( found, found_rev ) != 0 ) {
			printf ( "FAILURE: list reversal mismatch (forward "
				 "\"%s\", reverse \"%s\")\n",
				 found, found_rev  );
			return 0;
		}

		/* Compare against expected content */
		if ( strcmp ( found, expected ) == 0 ) {
			return 1;
		} else {
			printf ( "FAILURE: expected \"%s\", got \"%s\"\n",
			 expected, found );
			return 0;
		}
	}
}

/**
 * Report list test result
 *
 * @v list		Test list
 * @v expected		Expected contents
 */
#define list_contents_ok( list, expected ) do {			\
	ok ( list_check_contents ( (list), (expected) ) );	\
	} while ( 0 )

/**
 * Report list iteration test result
 *
 * @v macro		Iterator macro
 * @v expected		Expected contents
 * @v pos		Iterator
 * @v ...		Arguments to iterator macro
 */
#define list_iterate_ok( macro, expected, pos, ... ) do {	\
	const char *check = expected;				\
	macro ( pos, __VA_ARGS__ ) {				\
		struct list_test *entry =			\
			list_entry ( pos, struct list_test,	\
				     list );			\
		ok ( entry->label == *(check++) );		\
	}							\
	ok ( *check == '\0' );					\
	} while ( 0 )

/**
 * Report list entry iteration test result
 *
 * @v macro		Iterator macro
 * @v expected		Expected contents
 * @v pos		Iterator
 * @v ...		Arguments to iterator macro
 */
#define list_iterate_entry_ok( macro, expected, pos, ... ) do {	\
	const char *check = expected;				\
	macro ( pos, __VA_ARGS__ ) {				\
		ok ( (pos)->label == *(check++) );		\
	}							\
	ok ( *check == '\0' );					\
	} while ( 0 )

/**
 * Perform list self-test
 *
 */
static void list_test_exec ( void ) {
	struct list_head *list = &test_list;
	struct list_head target_list;
	struct list_head *target = &target_list;
	struct list_head *raw_pos;
	struct list_test *pos;
	struct list_test *tmp;

	/* Test initialiser and list_empty() */
	ok ( list_empty ( list ) );
	list_contents_ok ( list, "" );

	/* Test list_add(), list_add_tail() and list_del() */
	INIT_LIST_HEAD ( list );
	list_contents_ok ( list, "" );
	list_add ( &list_tests[4].list, list ); /* prepend */
	list_contents_ok ( list, "4" );
	list_add ( &list_tests[2].list, list ); /* prepend */
	list_contents_ok ( list, "24" );
	list_add_tail ( &list_tests[7].list, list ); /* append */
	list_contents_ok ( list, "247" );
	list_add ( &list_tests[1].list, &list_tests[4].list ); /* after */
	list_contents_ok ( list, "2417" );
	list_add_tail ( &list_tests[8].list, &list_tests[7].list ); /* before */
	list_contents_ok ( list, "24187" );
	list_del ( &list_tests[4].list ); /* delete middle */
	list_contents_ok ( list, "2187" );
	list_del ( &list_tests[2].list ); /* delete first */
	list_contents_ok ( list, "187" );
	list_del ( &list_tests[7].list ); /* delete last */
	list_contents_ok ( list, "18" );
	list_del ( &list_tests[1].list ); /* delete all */
	list_del ( &list_tests[8].list ); /* delete all */
	list_contents_ok ( list, "" );
	ok ( list_empty ( list ) );

	/* Test list_is_singular() */
	INIT_LIST_HEAD ( list );
	ok ( ! list_is_singular ( list ) );
	list_add ( &list_tests[1].list, list );
	ok ( list_is_singular ( list ) );
	list_add ( &list_tests[3].list, list );
	ok ( ! list_is_singular ( list ) );
	list_del ( &list_tests[1].list );
	ok ( list_is_singular ( list ) );

	/* Test list_is_last() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[6].list, list );
	ok ( list_is_last ( &list_tests[6].list, list ) );
	list_add_tail ( &list_tests[4].list, list );
	ok ( list_is_last ( &list_tests[4].list, list ) );
	ok ( ! list_is_last ( &list_tests[6].list, list ) );

	/* Test list_cut_position() - empty list */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_cut_position ( target, list, list );
	list_contents_ok ( list, "" );
	list_contents_ok ( target, "" );

	/* Test list_cut_position() - singular list, move nothing */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[4].list, list );
	list_cut_position ( target, list, list );
	list_contents_ok ( list, "4" );
	list_contents_ok ( target, "" );

	/* Test list_cut_position() - singular list, move singular entry */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[9].list, list );
	list_cut_position ( target, list, &list_tests[9].list );
	list_contents_ok ( list, "" );
	list_contents_ok ( target, "9" );

	/* Test list_cut_position() - multi-entry list, move nothing */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[7].list, list );
	INIT_LIST_HEAD ( target );
	list_cut_position ( target, list, list );
	list_contents_ok ( list, "327" );
	list_contents_ok ( target, "" );

	/* Test list_cut_position() - multi-entry list, move some */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[8].list, list );
	list_add_tail ( &list_tests[0].list, list );
	list_add_tail ( &list_tests[9].list, list );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_cut_position ( target, list, &list_tests[0].list );
	list_contents_ok ( list, "932" );
	list_contents_ok ( target, "80" );

	/* Test list_cut_position() - multi-entry list, move everything */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[7].list, list );
	list_add_tail ( &list_tests[1].list, list );
	list_cut_position ( target, list, &list_tests[1].list );
	list_contents_ok ( list, "" );
	list_contents_ok ( target, "35471" );

	/* Test list_splice() - empty list */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_splice ( list, target );
	list_contents_ok ( list, "" );
	list_contents_ok ( target, "" );

	/* Test list_splice() - both lists empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_splice ( list, target );
	list_contents_ok ( target, "" );

	/* Test list_splice() - source list empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[1].list, target );
	list_add_tail ( &list_tests[3].list, target );
	list_splice ( list, &list_tests[1].list );
	list_contents_ok ( target, "13" );

	/* Test list_splice() - destination list empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[6].list, list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_splice ( list, target );
	list_contents_ok ( target, "652" );

	/* Test list_splice() - both lists non-empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[8].list, list );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[1].list, target );
	list_add_tail ( &list_tests[9].list, target );
	list_splice ( list, &list_tests[1].list );
	list_contents_ok ( target, "18459" );

	/* Test list_splice_tail() - both lists empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_splice_tail ( list, target );
	list_contents_ok ( target, "" );

	/* Test list_splice_tail() - source list empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[5].list, target );
	list_splice_tail ( list, &list_tests[5].list );
	list_contents_ok ( target, "5" );

	/* Test list_splice_tail() - destination list empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[1].list, list );
	list_add_tail ( &list_tests[0].list, list );
	list_splice_tail ( list, target );
	list_contents_ok ( target, "210" );

	/* Test list_splice_tail() - both lists non-empty */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[9].list, list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[7].list, list );
	list_add_tail ( &list_tests[2].list, target );
	list_add_tail ( &list_tests[4].list, target );
	list_splice_tail ( list, &list_tests[2].list );
	list_contents_ok ( target, "95724" );

	/* Test list_splice_init() */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[1].list, target );
	list_splice_init ( list, target );
	ok ( list_empty ( list ) );
	list_contents_ok ( list, "" );
	list_contents_ok ( target, "41" );

	/* Test list_splice_tail_init() */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( target );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[5].list, target );
	list_splice_tail_init ( list, &list_tests[5].list );
	ok ( list_empty ( list ) );
	list_contents_ok ( list, "" );
	list_contents_ok ( target, "325" );

	/* Test list_entry() */
	INIT_LIST_HEAD ( &list_tests[3].list );  // for list_check()
	ok ( list_entry ( &list_tests[3].list, struct list_test, list )
	     == &list_tests[3] );

	/* Test list_first_entry() and list_last_entry() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[9].list, list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[6].list, list );
	ok ( list_first_entry ( list, struct list_test, list )
	     == &list_tests[9] );
	ok ( list_last_entry ( list, struct list_test, list )
	     == &list_tests[6] );
	list_del ( &list_tests[9].list );
	ok ( list_first_entry ( list, struct list_test, list )
	     == &list_tests[5] );
	ok ( list_last_entry ( list, struct list_test, list )
	     == &list_tests[6] );
	list_del ( &list_tests[6].list );
	ok ( list_first_entry ( list, struct list_test, list )
	     == &list_tests[5] );
	ok ( list_last_entry ( list, struct list_test, list )
	     == &list_tests[5] );
	list_del ( &list_tests[5].list );
	ok ( list_first_entry ( list, struct list_test, list ) == NULL );
	ok ( list_last_entry ( list, struct list_test, list ) == NULL );

	/* Test list_next_entry() and list_prev_entry() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[1].list, list );
	list_add_tail ( &list_tests[7].list, list );
	ok ( list_prev_entry ( &list_tests[5], list, list ) == NULL );
	ok ( list_next_entry ( &list_tests[5], list, list ) == &list_tests[3] );
	ok ( list_prev_entry ( &list_tests[3], list, list ) == &list_tests[5] );
	ok ( list_next_entry ( &list_tests[3], list, list ) == &list_tests[1] );
	ok ( list_prev_entry ( &list_tests[1], list, list ) == &list_tests[3] );
	ok ( list_next_entry ( &list_tests[1], list, list ) == &list_tests[7] );
	ok ( list_prev_entry ( &list_tests[7], list, list ) == &list_tests[1] );
	ok ( list_next_entry ( &list_tests[7], list, list ) == NULL );
	list_del ( &list_tests[7].list );
	ok ( list_prev_entry ( &list_tests[1], list, list ) == &list_tests[3] );
	ok ( list_next_entry ( &list_tests[1], list, list ) == NULL );
	list_del ( &list_tests[3].list );
	ok ( list_prev_entry ( &list_tests[5], list, list ) == NULL );
	ok ( list_next_entry ( &list_tests[5], list, list ) == &list_tests[1] );
	ok ( list_prev_entry ( &list_tests[1], list, list ) == &list_tests[5] );
	ok ( list_next_entry ( &list_tests[1], list, list ) == NULL );

	/* Test list_is_first_entry() and list_is_last_entry() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[8].list, list );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[6].list, list );
	ok ( list_is_first_entry ( &list_tests[4], list, list ) );
	ok ( ! list_is_first_entry ( &list_tests[8], list, list ) );
	ok ( ! list_is_first_entry ( &list_tests[3], list, list ) );
	ok ( ! list_is_first_entry ( &list_tests[6], list, list ) );
	ok ( ! list_is_last_entry ( &list_tests[4], list, list ) );
	ok ( ! list_is_last_entry ( &list_tests[8], list, list ) );
	ok ( ! list_is_last_entry ( &list_tests[3], list, list ) );
	ok ( list_is_last_entry ( &list_tests[6], list, list ) );
	list_del ( &list_tests[4].list );
	ok ( list_is_first_entry ( &list_tests[8], list, list ) );
	list_del ( &list_tests[8].list );
	list_del ( &list_tests[6].list );
	ok ( list_is_first_entry ( &list_tests[3], list, list ) );
	ok ( list_is_last_entry ( &list_tests[3], list, list ) );

	/* Test list_is_head_entry() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[1].list, list );
	list_add_tail ( &list_tests[6].list, list );
	list_add_tail ( &list_tests[8].list, list );
	ok ( list_is_head_entry ( list_entry ( list, typeof ( *pos ), list ),
				  list, list ) );
	ok ( ! list_is_head_entry ( &list_tests[1], list, list ) );
	ok ( ! list_is_head_entry ( &list_tests[6], list, list ) );
	ok ( ! list_is_head_entry ( &list_tests[8], list, list ) );
	list_for_each_entry ( pos, list, list ) {
		ok ( list_contains_entry ( pos, list, list ) );
		ok ( ! list_is_head_entry ( pos, list, list ) );
	}
	ok ( list_is_head_entry ( pos, list, list ) );

	/* Test list_for_each() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[6].list, list );
	list_add_tail ( &list_tests[7].list, list );
	list_add_tail ( &list_tests[3].list, list );
	list_iterate_ok ( list_for_each, "673", raw_pos, list );

	/* Test list_for_each_entry() and list_for_each_entry_reverse() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[3].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[6].list, list );
	list_add_tail ( &list_tests[9].list, list );
	list_iterate_entry_ok ( list_for_each_entry, "3269",
				pos, list, list );
	list_iterate_entry_ok ( list_for_each_entry_reverse, "9623",
				pos, list, list );

	/* Test list_for_each_entry_safe() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[1].list, list );
	{
		char *expected = "241";
		list_for_each_entry_safe ( pos, tmp, list, list ) {
			list_contents_ok ( list, expected );
			list_del ( &pos->list );
			expected++;
			list_contents_ok ( list, expected );
		}
	}
	ok ( list_empty ( list ) );

	/* Test list_for_each_entry_continue() and
	 * list_for_each_entry_continue_reverse()
	 */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[7].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[9].list, list );
	list_add_tail ( &list_tests[3].list, list );
	pos = &list_tests[7];
	list_iterate_entry_ok ( list_for_each_entry_continue, "293",
				pos, list, list );
	ok ( pos == list_entry ( list, struct list_test, list ) );
	list_iterate_entry_ok ( list_for_each_entry_continue, "47293",
				pos, list, list );
	pos = &list_tests[3];
	list_iterate_entry_ok ( list_for_each_entry_continue, "",
				pos, list, list );
	pos = &list_tests[2];
	list_iterate_entry_ok ( list_for_each_entry_continue_reverse, "74",
				pos, list, list );
	ok ( pos == list_entry ( list, struct list_test, list ) );
	list_iterate_entry_ok ( list_for_each_entry_continue_reverse, "39274",
				pos, list, list );
	pos = &list_tests[4];
	list_iterate_entry_ok ( list_for_each_entry_continue_reverse, "",
				pos, list, list );

	/* Test list_for_each_entry_safe_continue() */
	INIT_LIST_HEAD ( list );
	list_add_tail ( &list_tests[9].list, list );
	list_add_tail ( &list_tests[4].list, list );
	list_add_tail ( &list_tests[2].list, list );
	list_add_tail ( &list_tests[5].list, list );
	list_add_tail ( &list_tests[7].list, list );
	{
		char *expecteds[] = { "94257", "9457", "947", "94" };
		char **expected = expecteds;
		pos = &list_tests[4];
		list_for_each_entry_safe_continue ( pos, tmp, list, list ) {
			list_contents_ok ( list, *expected );
			list_del ( &pos->list );
			expected++;
			list_contents_ok ( list, *expected );
		}
	}
	list_contents_ok ( list, "94" );
	{
		char *expecteds[] = { "94", "4", "" };
		char **expected = expecteds;
		ok ( pos == list_entry ( list, struct list_test, list ) );
		list_for_each_entry_safe_continue ( pos, tmp, list, list ) {
			list_contents_ok ( list, *expected );
			list_del ( &pos->list );
			expected++;
			list_contents_ok ( list, *expected );
		}
	}
	ok ( list_empty ( list ) );

	/* Test list_contains() and list_contains_entry() */
	INIT_LIST_HEAD ( list );
	INIT_LIST_HEAD ( &list_tests[3].list );
	list_add ( &list_tests[8].list, list );
	list_add ( &list_tests[5].list, list );
	ok ( list_contains ( &list_tests[8].list, list ) );
	ok ( list_contains_entry ( &list_tests[8], list, list ) );
	ok ( list_contains ( &list_tests[5].list, list ) );
	ok ( list_contains_entry ( &list_tests[5], list, list ) );
	ok ( ! list_contains ( &list_tests[3].list, list ) );
	ok ( ! list_contains_entry ( &list_tests[3], list, list ) );

	/* Test list_check_contains_entry() */
	INIT_LIST_HEAD ( list );
	list_add ( &list_tests[4].list, list );
	list_add ( &list_tests[0].list, list );
	list_add ( &list_tests[3].list, list );
	list_check_contains_entry ( &list_tests[4], list, list );
	list_check_contains_entry ( &list_tests[0], list, list );
	list_check_contains_entry ( &list_tests[3], list, list );
}

/** List self-test */
struct self_test list_test __self_test = {
	.name = "list",
	.exec = list_test_exec,
};
