Added tests for the last fix.

This commit is contained in:
Matthias Koefferlein 2024-06-16 16:54:20 +02:00
parent 7082b0528d
commit 24a9e6824a
2 changed files with 64 additions and 32 deletions

View File

@ -1297,10 +1297,10 @@ static gsi::Class<B> decl_b ("", "B",
gsi::method ("an_cref", &B::an_cref) +
// implemented by extension below:
// gsi::iterator_ext ("b10", &b10b_ext, &b10e_ext) +
gsi::iterator ("b10_nc", &B::b10b_nc, &B::b10e_nc) +
gsi::iterator ("b11", &B::b11b, &B::b11e) +
gsi::iterator ("b12", &B::b12b, &B::b12e) +
gsi::iterator ("b13", &B::b13b, &B::b13e) +
gsi::iterator ("b10_nc|each_a_be_nc", &B::b10b_nc, &B::b10e_nc) +
gsi::iterator ("b11|each_a_be_v", &B::b11b, &B::b11e) +
gsi::iterator ("b12|each_a_be_p", &B::b12b, &B::b12e) +
gsi::iterator ("b13|each_a_be_cp", &B::b13b, &B::b13e) +
gsi::method ("amember_or_nil_alt|amember_or_nil", &B::amember_or_nil) +
gsi::method ("amember_ptr_alt|amember_ptr", &B::amember_ptr) +
gsi::method ("xxx|amember_cptr", &B::amember_cptr) +
@ -1444,8 +1444,8 @@ static gsi::Class<B> decl_b ("", "B",
// extending B
static gsi::ClassExt<B> b_ext (
gsi::iterator_ext ("b10", &b10b_ext, &b10e_ext) +
gsi::iterator_ext ("b10p", &b10bp_ext, &b10ep_ext)
gsi::iterator_ext ("b10|each_a_be", &b10b_ext, &b10e_ext) +
gsi::iterator_ext ("b10p|each_a_be_pp", &b10bp_ext, &b10ep_ext)
);
CopyDetector *new_cd (int x)

View File

@ -665,7 +665,7 @@ class Basic_TestClass < TestBase
if !$leak_check
begin
b.b10 { |a| arr.push(a.get_n) } # b10 is a const iterator - cannot call a1 on it
b.each_a_be { |a| arr.push(a.get_n) } # b10 is a const iterator - cannot call a1 on it
rescue
err_caught = true
end
@ -679,7 +679,7 @@ class Basic_TestClass < TestBase
if !$leak_check
begin
b.b10p { |a| arr.push(a.get_n) } # b10p is a const iterator - cannot call a1 on it
b.each_a_be_pp { |a| arr.push(a.get_n) } # b10p is a const iterator - cannot call a1 on it
rescue
err_caught = true
end
@ -689,85 +689,85 @@ class Basic_TestClass < TestBase
end
arr = []
b.b10 { |a| arr.push(a.dup.get_n) }
b.each_a_be { |a| arr.push(a.dup.get_n) }
assert_equal(arr, [100, 121, 144])
arr = []
b.dup.b10 { |a| arr.push(a.dup.get_n) }
b.dup.each_a_be { |a| arr.push(a.dup.get_n) }
assert_equal(arr, [100, 121, 144])
arr = []
b.b10 { |a| arr.push(a.get_n_const) }
b.each_a_be { |a| arr.push(a.get_n_const) }
assert_equal(arr, [100, 121, 144])
arr = []
b.b10p { |a| arr.push(a.dup.get_n) }
b.each_a_be_pp { |a| arr.push(a.dup.get_n) }
assert_equal(arr, [100, 121, 144])
arr = []
b.dup.b10p { |a| arr.push(a.dup.get_n) }
b.dup.each_a_be_pp { |a| arr.push(a.dup.get_n) }
assert_equal(arr, [100, 121, 144])
arr = []
b.b10p { |a| arr.push(a.get_n_const) }
b.each_a_be_pp { |a| arr.push(a.get_n_const) }
assert_equal(arr, [100, 121, 144])
arr = []
b.b11 { |a| arr.push(a.get_n) }
b.each_a_be_v { |a| arr.push(a.get_n) }
assert_equal(arr, [100, 121, 144])
arr = []
b.dup.b11 { |a| arr.push(a.get_n) }
b.dup.each_a_be_v { |a| arr.push(a.get_n) }
assert_equal(arr, [100, 121, 144])
arr = []
b.b12 { |a| arr.push(a.get_n) }
b.each_a_be_p { |a| arr.push(a.get_n) }
assert_equal(arr, [7100, 7121, 7144, 7169])
arr = []
b.dup.b12 { |a| arr.push(a.get_n) }
b.dup.each_a_be_p { |a| arr.push(a.get_n) }
assert_equal(arr, [7100, 7121, 7144, 7169])
aarr = b.b16a
aarr = b.av
arr = []
aarr.each { |a| arr.push(a.get_n) }
assert_equal(arr, [100, 121, 144])
aarr = b.b16b
aarr = b.av_cref
arr = []
aarr.each { |a| arr.push(a.get_n) }
assert_equal(arr, [100, 121, 144])
aarr = b.b16c
aarr = b.av_ref
arr = []
aarr.each { |a| arr.push(a.get_n) }
assert_equal(arr, [100, 121, 144])
b.b17a( [ RBA::A.new_a( 101 ), RBA::A.new_a( -122 ) ] )
b.av_cref = [ RBA::A.new_a( 101 ), RBA::A.new_a( -122 ) ]
arr = []
b.b11 { |a| arr.push(a.get_n) }
b.each_a_be_v { |a| arr.push(a.get_n) }
assert_equal(arr, [101, -122])
b.b17a( [] )
b.av_cref = []
arr = []
b.b11 { |a| arr.push(a.get_n) }
b.each_a_be_v { |a| arr.push(a.get_n) }
assert_equal(arr, [])
b.b17b( [ RBA::A.new_a( 102 ), RBA::A.new_a( -123 ) ] )
b.av_ref = [ RBA::A.new_a( 102 ), RBA::A.new_a( -123 ) ]
arr = []
b.b11 { |a| arr.push(a.get_n) }
b.each_a_be_v { |a| arr.push(a.get_n) }
assert_equal(arr, [102, -123])
b.b17c( [ RBA::A.new_a( 100 ), RBA::A.new_a( 121 ), RBA::A.new_a( 144 ) ] )
b.av = [ RBA::A.new_a( 100 ), RBA::A.new_a( 121 ), RBA::A.new_a( 144 ) ]
arr = []
b.b11 { |a| arr.push(a.get_n) }
b.each_a_be_v { |a| arr.push(a.get_n) }
assert_equal(arr, [100, 121, 144])
if !$leak_check
arr = []
begin
b.b13 { |a| arr.push(a.get_n) }
b.each_a_be_cp { |a| arr.push(a.get_n) }
rescue
err_caught = true
end
@ -777,11 +777,11 @@ class Basic_TestClass < TestBase
end
arr = []
b.b13 { |a| arr.push(a.get_n_const) }
b.each_a_be_cp { |a| arr.push(a.get_n_const) }
assert_equal(arr, [-3100, -3121])
arr = []
b.dup.b13 { |a| arr.push(a.get_n_const) }
b.dup.each_a_be_cp { |a| arr.push(a.get_n_const) }
assert_equal(arr, [-3100, -3121])
arr = []
@ -938,6 +938,38 @@ class Basic_TestClass < TestBase
end
def _iter_find(b, find)
b.each_a_be do |a|
if a.get_n_const == find
return true
end
end
return false
end
# Iterator break, return, continue
def test_13c
b = RBA::B.new
arr = []
b.each_a_be { |a| arr.push(a.get_n_const) }
assert_equal(arr, [100, 121, 144])
arr = []
b.each_a_be do |a|
if a.get_n_const == 121
next
end
arr.push(a.get_n_const)
end
assert_equal(arr, [100, 144])
assert_equal(_iter_find(b, 121), true)
assert_equal(_iter_find(b, 122), false)
end
def test_14
a = RBA::A.new