1 /*
2  * Copyright 2017      Sven Verdoolaege
3  *
4  * Use of this software is governed by the MIT license
5  *
6  * Written by Sven Verdoolaege.
7  */
8 
9 #include <stdlib.h>
10 
11 #include <isl/arg.h>
12 #include <isl/options.h>
13 #include <isl/schedule.h>
14 
15 struct options {
16 	struct isl_options *isl;
17 	char *schedule1;
18 	char *schedule2;
19 };
20 
ISL_ARGS_START(struct options,options_args)21 ISL_ARGS_START(struct options, options_args)
22 ISL_ARG_CHILD(struct options, isl, "isl", &isl_options_args, "isl options")
23 ISL_ARG_ARG(struct options, schedule1, "schedule1", NULL)
24 ISL_ARG_ARG(struct options, schedule2, "schedule2", NULL)
25 ISL_ARGS_END
26 
27 ISL_ARG_DEF(options, struct options, options_args)
28 
29 static void die(const char *msg)
30 {
31 	fprintf(stderr, "%s\n", msg);
32 	exit(EXIT_FAILURE);
33 }
34 
open_or_die(const char * filename)35 static FILE *open_or_die(const char *filename)
36 {
37 	FILE *file;
38 
39 	file = fopen(filename, "r");
40 	if (!file) {
41 		fprintf(stderr, "Unable to open %s\n", filename);
42 		exit(EXIT_FAILURE);
43 	}
44 	return file;
45 }
46 
47 /* Given two YAML descriptions of isl_schedule objects, check whether
48  * they are equivalent.
49  * Return EXIT_SUCCESS if they are and EXIT_FAILURE if they are not
50  * or if anything else went wrong.
51  */
main(int argc,char ** argv)52 int main(int argc, char **argv)
53 {
54 	isl_ctx *ctx;
55 	struct options *options;
56 	FILE *input1, *input2;
57 	isl_bool equal;
58 	isl_schedule *s1, *s2;
59 
60 	options = options_new_with_defaults();
61 	if (!options)
62 		return EXIT_FAILURE;
63 
64 	ctx = isl_ctx_alloc_with_options(&options_args, options);
65 	argc = options_parse(options, argc, argv, ISL_ARG_ALL);
66 
67 	input1 = open_or_die(options->schedule1);
68 	input2 = open_or_die(options->schedule2);
69 	s1 = isl_schedule_read_from_file(ctx, input1);
70 	s2 = isl_schedule_read_from_file(ctx, input2);
71 
72 	equal = isl_schedule_plain_is_equal(s1, s2);
73 	if (equal < 0)
74 		return EXIT_FAILURE;
75 	if (!equal)
76 		die("schedules differ");
77 
78 	isl_schedule_free(s1);
79 	isl_schedule_free(s2);
80 	fclose(input1);
81 	fclose(input2);
82 	isl_ctx_free(ctx);
83 
84 	return EXIT_SUCCESS;
85 }
86