/*****************************************************************************\
 *  test7.18.prog.c Report failures in slurm_hostlist_find().
 *  See bugs 5711 and 5746.
 *****************************************************************************
 *  Copyright (C) SchedMD LLC.
 *
 *  This file is part of Slurm, a resource management program.
 *  For details, see <https://slurm.schedmd.com/>.
 *  Please also read the included file: DISCLAIMER.
 *
 *  Slurm 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 (at your option)
 *  any later version.
 *
 *  Slurm 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 Slurm; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
\*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>

#include "slurm/slurm.h"
#include "slurm/slurm_errno.h"

hostlist_t *hl = NULL;
int testid = 0;

static void _find_host(const char *hostname)
{
	printf("Find %s...%s\n", hostname,
	       slurm_hostlist_find(hl, hostname) >= 0 ? "found" : "FAILURE");
}

static void _create_hostlist(const char *hostnames)
{
	printf("\nTest %d: hostlist: %s\n", testid, hostnames);
	hl = slurm_hostlist_create(hostnames);
	testid++;
}

int main(int argc, char **argv)
{
	/* First, some basic tests. */
	_create_hostlist("node");
	_find_host("node");
	slurm_hostlist_destroy(hl);

	_create_hostlist("n1");
	_find_host("n1");
	slurm_hostlist_destroy(hl);

	_create_hostlist("node,node2");
	_find_host("node");
	_find_host("node2");
	slurm_hostlist_destroy(hl);

	_create_hostlist("n1-2,n1-3");
	_find_host("n1-2");
	_find_host("n1-3");
	slurm_hostlist_destroy(hl);

	_create_hostlist("n1.2,n1.3");
	_find_host("n1.2");
	_find_host("n1.3");
	slurm_hostlist_destroy(hl);

	/* Ranges */
	_create_hostlist("n[1-3]");
	_find_host("n1");
	_find_host("n2");
	_find_host("n3");
	slurm_hostlist_destroy(hl);

	_create_hostlist("snowflake[1-10]");
	_find_host("snowflake1");
	_find_host("snowflake2");
	_find_host("snowflake3");
	_find_host("snowflake4");
	_find_host("snowflake5");
	_find_host("snowflake6");
	_find_host("snowflake7");
	_find_host("snowflake8");
	_find_host("snowflake9");
	_find_host("snowflake10");
	slurm_hostlist_destroy(hl);

	/* Make sure leading zeros are properly handled. */
	_create_hostlist("n0000[1-3]");
	_find_host("n00001");
	_find_host("n00002");
	_find_host("n00003");
	slurm_hostlist_destroy(hl);

	_create_hostlist("n0000[11-15]");
	_find_host("n000011");
	_find_host("n000012");
	_find_host("n000013");
	_find_host("n000014");
	_find_host("n000015");
	slurm_hostlist_destroy(hl);

	_create_hostlist("nid00[446-447],nid00392");
	_find_host("nid00392");
	_find_host("nid00446");
	_find_host("nid00447");
	slurm_hostlist_destroy(hl);

	/* Other leading numbers that are partially but not completely zero. */
	_create_hostlist("nid10[446-447],nid10392");
	_find_host("nid10392");
	_find_host("nid10446");
	_find_host("nid10447");
	slurm_hostlist_destroy(hl);

	/* (Same hosts as the previous test, but different order.) */
	_create_hostlist("nid10392,nid10[446-447]");
	_find_host("nid10392");
	_find_host("nid10446");
	_find_host("nid10447");
	slurm_hostlist_destroy(hl);

	_create_hostlist("nid010[446-447],nid010392");
	_find_host("nid010392");
	_find_host("nid010446");
	_find_host("nid010447");
	slurm_hostlist_destroy(hl);

	_create_hostlist("nid00[446-447],nid00392,nid10[446-447],nid10392,snowflake[1-10]");
	_find_host("nid00392");
	_find_host("nid00446");
	_find_host("nid00447");
	_find_host("nid10392");
	_find_host("nid10446");
	_find_host("nid10447");
	_find_host("snowflake1");
	_find_host("snowflake2");
	_find_host("snowflake3");
	_find_host("snowflake4");
	_find_host("snowflake5");
	_find_host("snowflake6");
	_find_host("snowflake7");
	_find_host("snowflake8");
	_find_host("snowflake9");
	_find_host("snowflake10");
	slurm_hostlist_destroy(hl);

	_create_hostlist("nid0000[1-9],nid00[100-900],nid000[10-90],nid0[1000-9000],nid[1000-9000]");
	_find_host("nid00001");
	_find_host("nid00005");
	_find_host("nid00115");
	_find_host("nid00105");
	_find_host("nid01105");
	_find_host("nid00100");
	_find_host("nid00010");
	_find_host("nid00001");
	slurm_hostlist_destroy(hl);

	/* Multi-dimensional hosts. */
	_create_hostlist("ab[1-3]cd[6-7]");
	_find_host("ab1cd6");
	_find_host("ab1cd7");
	_find_host("ab2cd6");
	_find_host("ab2cd7");
	_find_host("ab3cd6");
	_find_host("ab3cd7");
	slurm_hostlist_destroy(hl);

	_create_hostlist("ab[1-2][1-3]");
	_find_host("ab11");
	_find_host("ab12");
	_find_host("ab13");
	_find_host("ab21");
	_find_host("ab22");
	_find_host("ab23");
	slurm_hostlist_destroy(hl);

	_create_hostlist("ab[1-2][1-3],n[2-4],c[10-11][333-334]");
	_find_host("ab11");
	_find_host("ab12");
	_find_host("ab13");
	_find_host("ab21");
	_find_host("ab22");
	_find_host("ab23");
	_find_host("n2");
	_find_host("n3");
	_find_host("n4");
	_find_host("c10333");
	_find_host("c10334");
	_find_host("c11333");
	_find_host("c11334");
	slurm_hostlist_destroy(hl);

	_create_hostlist("node1,node[2-4],node[5-6][7-8]");
	_find_host("node1");
	_find_host("node2");
	_find_host("node3");
	_find_host("node4");
	_find_host("node57");
	_find_host("node58");
	_find_host("node67");
	_find_host("node68");
	slurm_hostlist_destroy(hl);

	/* Combine multiple dimensions and zero padding */
	_create_hostlist("node000[1-2][02-03],node000[333]");
	_find_host("node000102");
	_find_host("node000103");
	_find_host("node000202");
	_find_host("node000203");
	_find_host("node000333");
	slurm_hostlist_destroy(hl);

	/* With hyphens, ranges, and multi-dimension ranges. */
	_create_hostlist("sgisummit-rcf-111-[1-15],sgiuv20-rcf-111-32,dper730xd-srcf-d16-[1-20],sgisummit-rcf-011-[1-15],dper730xd-srcf-016-[1-20],dper930-srcf-d15-05,dper7425-srcf-d15-[1-12],a-b-1-c2-[1-2][3-4]");
	_find_host("sgisummit-rcf-111-1");
	_find_host("sgiuv20-rcf-111-32");
	_find_host("dper730xd-srcf-d16-2");
	_find_host("sgisummit-rcf-011-5");
	_find_host("dper730xd-srcf-016-2");
	_find_host("dper930-srcf-d15-05");
	_find_host("dper7425-srcf-d15-1");
	_find_host("dper7425-srcf-d15-12");
	_find_host("a-b-1-c2-13");
	_find_host("a-b-1-c2-14");
	_find_host("a-b-1-c2-23");
	_find_host("a-b-1-c2-24");
	slurm_hostlist_destroy(hl);

	return 0;
}
