#!/usr/bin/env ruby # # Tests the bounds checking for integral parameters passed to wrapped functions. # require 'swig_assert' require 'numeric_bounds_checking' limits = Numeric_bounds_checking::Limits.new checker = Numeric_bounds_checking::Checker.new all_ok = true types = %w(schar uchar shrt ushrt int uint long ulong) types += %w(llong ullong) if limits.respond_to?(:llong_min) types.each do |t| min = limits.send("#{t}_min") max = limits.send("#{t}_max") meth = "pass_#{t}" # check within bounds swig_assert_equal("checker.#{meth}(#{min})", "#{min}", binding) swig_assert_equal("checker.#{meth}(#{max})", "#{max}", binding) # check outside bounds [ min - 1, max + 1 ].each do |val| ok = false begin ret = checker.send("#{meth}", val) rescue RangeError, TypeError ok = true end $stderr.puts "\n#{meth}(#{val}): Expected exception but got #{ret} for #{val} (type '#{t}') " unless ok all_ok = all_ok && ok end raise SwigRubyError.new("\nAt least one bounds check failed ") unless all_ok end