brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · a4aeaf5 Raw
100 lines · plain
1/*2 * Copyright 2018      Sven Verdoolaege3 *4 * Use of this software is governed by the MIT license5 *6 * Written by Sven Verdoolaege.7 */8 9#include <stdlib.h>10 11#include <isl/ctx.h>12#include <isl/options.h>13#include <isl/cpp-checked-conversion.h>14 15/* Check that converting a NULL object from the checked C++ bindings16 * (where the user is expected to check for NULL return values)17 * to the default C++ bindings (where exceptions are raised18 * instead of returning a NULL object) raises an exception.19 */20static void check_conversion_null(isl_ctx *ctx)21{22	isl::checked::set checked_set;23	isl::set set;24 25	bool caught = false;26	try {27		set = isl::uncheck(checked_set);28		isl_die(ctx, isl_error_unknown, "no exception raised", return);29	} catch (const isl::exception &e) {30		caught = true;31	}32	if (!caught)33		isl_die(ctx, isl_error_unknown, "no exception raised", return);34}35 36/* Dummy function on a set in the checked C++ bindings.37 */38static void f_checked(isl::checked::set set)39{40}41 42/* Dummy function on a set in the default C++ bindings.43 */44static void f_unchecked(isl::set set)45{46}47 48/* Check the conversion between C++ bindings in function calls.49 * An incorrect call will result in a compiler error.50 */51static void check_conversion_call(isl_ctx *ctx)52{53	isl::set set(ctx, "{ S[i] : 0 <= i < 10 }");54	isl::checked::set checked_set(ctx, "{ S[i] : 0 <= i < 10 }");55 56	f_unchecked(set);57	f_checked(isl::check(set));58	f_unchecked(isl::uncheck(checked_set));59	f_checked(checked_set);60}61 62/* Check that a double conversion results in the original set,63 * or at least something that is equal to the original set.64 */65static void check_conversion_equal(isl_ctx *ctx)66{67	isl::set set(ctx, "{ S[i] : 0 <= i < 10 }");68	isl::set set2;69	isl::checked::set checked_set;70 71	checked_set = isl::check(set);72	set2 = isl::uncheck(checked_set);73 74	if (!set.is_equal(set2))75		isl_die(ctx, isl_error_unknown, "bad conversion", return);76}77 78/* Perform some tests on the conversion between the default C++ bindings and79 * the checked C++ bindings.80 */81static void check_conversion(isl_ctx *ctx)82{83	check_conversion_null(ctx);84	check_conversion_call(ctx);85	check_conversion_equal(ctx);86}87 88int main()89{90	isl_ctx *ctx = isl_ctx_alloc();91 92	isl_options_set_on_error(ctx, ISL_ON_ERROR_ABORT);93 94	check_conversion(ctx);95 96	isl_ctx_free(ctx);97 98	return EXIT_SUCCESS;99}100