| #!/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) |