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