| #!/usr/bin/env ruby | |
| # | |
| # Put description here | |
| # | |
| # | |
| # | |
| # | |
| # | |
| require 'swig_assert' | |
| require 'cpp11_std_array' | |
| include Cpp11_std_array | |
| def failed(a, b, msg) | |
| raise RuntimeError, "#{msg} #{a} #{b}" | |
| end | |
| def compare_sequences(a, b) | |
| if a.size != b.size | |
| failed(a, b, "different sizes") | |
| end | |
| for i in 0..a.size-1 | |
| failed(a, b, "elements are different:") if a[i] != b[i] | |
| end | |
| end | |
| def compare_containers(rubyarray, swigarray) | |
| compare_sequences(rubyarray, swigarray) | |
| end | |
| def setslice_exception(swigarray, newval) | |
| begin | |
| swigarray[0..swigarray.size] = newval | |
| raise RuntimeError, "swigarray[] = #{newval} missed set exception for swigarray: #{swigarray}" | |
| rescue ArgumentError => e | |
| # print "exception: #{e}" | |
| end | |
| end | |
| # Check std::array has similar behaviour to a Ruby array | |
| # except it is not resizable | |
| ps = [0, 1, 2, 3, 4, 5] | |
| ai = ArrayInt6.new(ps) | |
| compare_containers(ps, ai) | |
| # slices | |
| compare_containers(ps[0..5], ai[0..5]) | |
| compare_containers(ps[-6..-1], ai[-6..-1]) | |
| compare_containers(ps[0..10], ai[0..10]) | |
| # Reverse (.reverse is not provided) | |
| rev = [] | |
| ai.reverse_each { |i| rev.push i } | |
| compare_containers(ps.reverse, rev) | |
| # Modify content | |
| for i in 0..ps.size-1 | |
| ps[i] = ps[i] * 10 | |
| ai[i] = ai[i] * 10 | |
| end | |
| compare_containers(ps, ai) | |
| # Empty | |
| ai = ArrayInt6.new() | |
| compare_containers([0, 0, 0, 0, 0, 0], ai) | |
| # Set slice | |
| newvals = [10, 20, 30, 40, 50, 60] | |
| ai[0, 6] = newvals | |
| compare_containers(ai, newvals) | |
| ai[-6, 6] = newvals | |
| compare_containers(ai, newvals) | |
| setslice_exception(ai, [1, 2, 3, 4, 5, 6, 7]) | |
| setslice_exception(ai, [1, 2, 3, 4, 5]) | |
| setslice_exception(ai, [1, 2, 3, 4]) | |
| setslice_exception(ai, [1, 2, 3]) | |
| setslice_exception(ai, [1, 2]) | |
| setslice_exception(ai, [1]) | |
| setslice_exception(ai, []) | |
| # Check return | |
| compare_containers(arrayOutVal(), [-2, -1, 0, 0, 1, 2]) | |
| compare_containers(arrayOutConstRef(), [-2, -1, 0, 0, 1, 2]) | |
| compare_containers(arrayOutRef(), [-2, -1, 0, 0, 1, 2]) | |
| compare_containers(arrayOutPtr(), [-2, -1, 0, 0, 1, 2]) | |
| # Check passing arguments | |
| ai = arrayInVal([9, 8, 7, 6, 5, 4]) | |
| compare_containers(ai, [90, 80, 70, 60, 50, 40]) | |
| ai = arrayInConstRef([9, 8, 7, 6, 5, 4]) | |
| compare_containers(ai, [90, 80, 70, 60, 50, 40]) | |
| ai = ArrayInt6.new([9, 8, 7, 6, 5, 4]) | |
| arrayInRef(ai) | |
| compare_containers(ai, [90, 80, 70, 60, 50, 40]) | |
| ai = ArrayInt6.new([9, 8, 7, 6, 5, 4]) | |
| arrayInPtr(ai) | |
| compare_containers(ai, [90, 80, 70, 60, 50, 40]) | |
| # indexing | |
| ai = ArrayInt6.new([9, 8, 7, 6, 5, 4]) | |
| swig_assert_equal(ai[0], 9, binding) | |
| swig_assert_equal(ai[5], 4, binding) | |
| swig_assert_equal(ai[6], nil, binding) | |
| swig_assert_equal(ai[-7], nil, binding) | |
| # fill | |
| ai.fill(111) | |
| compare_containers(ai, [111, 111, 111, 111, 111, 111]) | |
| # various | |
| ai = ArrayInt6.new([9, 8, 7, 6, 5, 4]) | |
| swig_assert(ai.include? 9) | |
| swig_assert(!ai.include?(99)) | |
| swig_assert(ai.kind_of? ArrayInt6) | |
| swig_assert(ai.find {|x| x == 6 } == 6) | |
| swig_assert(ai.find {|x| x == 66 } == nil) | |
| swig_assert(ai.respond_to?(:each)) | |
| swig_assert(ai.respond_to?(:each_with_index)) | |
| ai = [0, 10, 20, 30, 40, 50] | |
| ai.each_with_index { |e,i| swig_assert(e/10 == i) } | |