#!/usr/bin/env ruby require 'li_constraints' include Li_constraints def check_double(except, fn, f, val) actual = true proper = false begin fn.call(val) rescue => e actual = false proper = e.class == ArgumentError && e.message == "Expected a #{f} value." end if actual if !except raise RuntimeError, "function '#{f}' with #{val} should perform an exception" end else if except raise RuntimeError, "function '#{f}' with #{val} should not perform an exception" elsif !proper raise RuntimeError, "function '#{f}' with #{val} should perform a proper exception" end end end nonnegative = -> (v) { test_nonnegative(v) } check_double(true, nonnegative, "non-negative", 10) check_double(true, nonnegative, "non-negative", 0) check_double(false, nonnegative, "non-negative", -10) nonpositive = -> (v) { test_nonpositive(v) } check_double(false, nonpositive, "non-positive", 10) check_double(true, nonpositive, "non-positive", 0) check_double(true, nonpositive, "non-positive", -10) positive = -> (v) { test_positive(v) } check_double(true, positive, "positive", 10) check_double(false, positive, "positive", 0) check_double(false, positive, "positive", -10) negative = -> (v) { test_negative(v) } check_double(false, negative, "negative", 10) check_double(false, negative, "negative", 0) check_double(true, negative, "negative", -10) nonzero = -> (v) { test_nonzero(v) } check_double(true, nonzero, "nonzero", 10) check_double(false, nonzero, "nonzero", 0) check_double(true, nonzero, "nonzero", -10) have_exception = false begin test_nonnull(nil) rescue => e have_exception = e.class == ArgumentError && e.message == "Received a NULL pointer." end if not have_exception raise RuntimeError, "test_nonnull should perform exception with 'null' value" end nonnull = get_nonnull() test_nonnull(nonnull)