c_extensions/c_arrays_no_parens.rb
tests/_examples/c_extensions/c_arrays_no_parens.rb in the metorex repository.
# A C extension building Arrays, reading and writing their elements, and
# calling a method with a block that runs a C function.
require "tmpdir"
require_relative "build_helper"
class Listing
def to_ary
["converted"]
end
end
class Letters
def each
yield "a"
yield "b"
end
end
directory = Dir.mktmpdir
require build_extension("c_arrays.c", "c_arrays", directory)
arrays = CArrays.new
p arrays.convert [1, 2]
p arrays.convert({ "key" => "value" })
p arrays.convert "text"
p arrays.capacity 5
report { arrays.capacity(-1) }
p arrays.triple 1, 2, 3
p arrays.triple_args :a, :b, :c
p arrays.element [1, 2, 3], 1
p arrays.set_element [1, 2, 3], 2, 42
filled = [1, 2, 3]
p arrays.fill(filled, :set).equal? filled
p filled
source = [7, 8, 9]
target = [0, 0, 0]
arrays.copy_into source, target
p [source, target]
p arrays.aref [1, 2, 3, 4], 1
p arrays.aref [1, 2, 3, 4], 1, 2
p arrays.aref [1, 2, 3, 4], (1..)
p arrays.cat [1], 2, 3
report { arrays.cat [].freeze, 1 }
p arrays.clear [1, 2]
p arrays.concat [1], [2, 3]
deleting = [1, 2, 3, 2]
p arrays.delete_element deleting, 2
p arrays.delete_element deleting, 5
p deleting
p arrays.delete_at [1, 2, 3], -1
p arrays.delete_at [1, 2, 3], 5
p arrays.freeze([1]).frozen?
p arrays.includes [1, 2], 2
p arrays.includes [1, 2], 3
p arrays.join [1, 2, 3], "-"
p arrays.plus [1], [2]
reversed = [1, 2, 3]
p arrays.reverse(reversed).equal? reversed
p reversed
p arrays.rotate [1, 2, 3, 4], 1
p arrays.rotate [1, 2, 3, 4], -1
report { arrays.rotate [].freeze, 1 }
shifted = [1, 2]
p arrays.shift shifted
p shifted
p arrays.shift []
unsorted = [3, 1, 2]
p arrays.sort unsorted
p unsorted
p arrays.sort_bang unsorted
p unsorted
p arrays.subseq [1, 2, 3, 4, 5], 1, 3
p arrays.subseq [1, 2, 3, 4, 5], 4, 3
p arrays.subseq [1, 2, 3, 4, 5], 5, 1
p arrays.subseq [1, 2, 3, 4, 5], 6, 1
p arrays.subseq [1, 2, 3, 4, 5], -1, 1
p arrays.subseq [1, 2, 3, 4, 5], 1, -1
same = [1]
p arrays.to_ary(same).equal? same
p arrays.to_ary Listing.new
p arrays.to_ary 5
p arrays.to_s [1, "two", :three]
p arrays.pair :key, [1, 2]
p arrays.cleared 1, 2
p arrays.collect_each [1, 2, 3], "each"
p arrays.collect_each({ a: 1, b: 2 }, "each_pair")
yielded = []
arrays.yield_each(Letters.new) { |letter| yielded << letter.upcase }
p yielded
report { arrays.yield_each Letters.new }
p arrays.each_slice [1, 2, 3, 4, 5], 2
FileUtils.rm_rf directory
Output:
[1, 2]
[["key", "value"]]
["text"]
[]
ArgumentError: negative array size (or size too big)
[1, 2, 3]
[:a, :b, :c]
2
[1, 2, 42]
true
[:set, :set, :set]
[[7, 8, 9], [7, 8, 9]]
2
[2, 3]
[2, 3, 4]
[1, 2, 3]
FrozenError: can't modify frozen Array: []
[]
[1, 2, 3]
2
nil
[1, 3]
3
nil
true
true
false
"1-2-3"
[1, 2]
true
[3, 2, 1]
[2, 3, 4, 1]
[4, 1, 2, 3]
FrozenError: can't modify frozen Array: []
1
[2]
nil
[1, 2, 3]
[3, 1, 2]
[1, 2, 3]
[1, 2, 3]
[2, 3, 4]
[5]
[]
nil
nil
nil
true
["converted"]
[5]
"[1, \"two\", :three]"
[:key, [1, 2]]
[nil, nil]
[1, 2, 3]
[[:a, 1], [:b, 2]]
["A", "B"]
LocalJumpError: no block given (yield)
[[1, 2], [3, 4], [5]]