Skip to content

Commit 518851f

Browse files
author
ocean
committed
* array.c (rb_ary_fill): tail elements were vanished when the middle
part of array was filled. (ie: [0,1,2,3,4].fill(-1,2,1) => [0,1,-1]) * test/ruby/test_array.rb (test_fill): added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 8950f85 commit 518851f

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

ChangeLog

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
Tue Nov 15 16:04:10 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
2+
3+
* array.c (rb_ary_fill): tail elements were vanished when the middle
4+
part of array was filled. (ie: [0,1,2,3,4].fill(-1,2,1) => [0,1,-1])
5+
6+
* test/ruby/test_array.rb (test_fill): added.
7+
18
Tue Nov 15 14:39:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
29

310
* array.c (rb_ary_fill): should adjust array length correctly when

array.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2261,9 +2261,13 @@ rb_ary_fill(argc, argv, ary)
22612261
REALLOC_N(RARRAY(ary)->ptr, VALUE, end);
22622262
RARRAY(ary)->aux.capa = end;
22632263
}
2264-
if (beg > RARRAY(ary)->len) {
2265-
rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len);
2266-
}
2264+
RARRAY(ary)->len = end;
2265+
}
2266+
if (beg > RARRAY(ary)->len) {
2267+
rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len);
2268+
}
2269+
else {
2270+
rb_mem_clear(RARRAY(ary)->ptr + beg, end - beg);
22672271
}
22682272

22692273
if (block_p) {
@@ -2274,11 +2278,9 @@ rb_ary_fill(argc, argv, ary)
22742278
v = rb_yield(LONG2NUM(i));
22752279
if (i>=RARRAY(ary)->len) break;
22762280
RARRAY(ary)->ptr[i] = v;
2277-
RARRAY(ary)->len = i+1;
22782281
}
22792282
}
22802283
else {
2281-
RARRAY(ary)->len = end;
22822284
p = RARRAY(ary)->ptr + beg;
22832285
pend = p + len;
22842286
while (p < pend) {

test/ruby/test_array.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,27 @@ def test_find_all
108108
assert_equal(["baz","baz"], x.find_all{ |obj| obj == "baz" })
109109
assert_equal([3,3], x.find_all{ |obj| obj == 3 })
110110
end
111+
112+
def test_fill
113+
assert_equal([-1, -1, -1, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1))
114+
assert_equal([0, 1, 2, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, 3))
115+
assert_equal([0, 1, 2, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3, 2))
116+
assert_equal([0, 1, 2, -1, -1, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, 3, 5))
117+
assert_equal([0, 1, -1, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2, 2))
118+
assert_equal([0, 1, -1, -1, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, 2, 5))
119+
assert_equal([0, 1, 2, 3, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, -2, 1))
120+
assert_equal([0, 1, 2, 3, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, -2, 3))
121+
assert_equal([0, 1, 2, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3..4))
122+
assert_equal([0, 1, 2, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3...4))
123+
assert_equal([0, 1, -1, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2..-2))
124+
assert_equal([0, 1, -1, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2...-2))
125+
assert_equal([10, 11, 12, 13, 14, 15], [0, 1, 2, 3, 4, 5].fill{|i| i+10})
126+
assert_equal([0, 1, 2, 13, 14, 15], [0, 1, 2, 3, 4, 5].fill(3){|i| i+10})
127+
assert_equal([0, 1, 2, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(3, 2){|i| i+10})
128+
assert_equal([0, 1, 2, 13, 14, 15, 16, 17], [0, 1, 2, 3, 4, 5].fill(3, 5){|i| i+10})
129+
assert_equal([0, 1, 2, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(3..4){|i| i+10})
130+
assert_equal([0, 1, 2, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(3...4){|i| i+10})
131+
assert_equal([0, 1, 12, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(2..-2){|i| i+10})
132+
assert_equal([0, 1, 12, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(2...-2){|i| i+10})
133+
end
111134
end

0 commit comments

Comments
 (0)