mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
cstr.c: split bug_str_cstr_unterm
* ext/-test-/string/cstr.c (bug_str_cstr_unterm): split unterminating from bug_str_cstr_term. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8d7d4e3322
commit
41cbb7f050
2 changed files with 34 additions and 2 deletions
|
@ -9,9 +9,7 @@ bug_str_cstr_term(VALUE str)
|
||||||
int c;
|
int c;
|
||||||
rb_encoding *enc;
|
rb_encoding *enc;
|
||||||
|
|
||||||
rb_str_modify(str);
|
|
||||||
len = RSTRING_LEN(str);
|
len = RSTRING_LEN(str);
|
||||||
RSTRING_PTR(str)[len] = 'x';
|
|
||||||
s = StringValueCStr(str);
|
s = StringValueCStr(str);
|
||||||
rb_gc();
|
rb_gc();
|
||||||
enc = rb_enc_get(str);
|
enc = rb_enc_get(str);
|
||||||
|
@ -19,6 +17,17 @@ bug_str_cstr_term(VALUE str)
|
||||||
return INT2NUM(c);
|
return INT2NUM(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
bug_str_cstr_unterm(VALUE str, VALUE c)
|
||||||
|
{
|
||||||
|
long len;
|
||||||
|
|
||||||
|
rb_str_modify(str);
|
||||||
|
len = RSTRING_LEN(str);
|
||||||
|
RSTRING_PTR(str)[len] = NUM2CHR(c);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
bug_str_cstr_term_char(VALUE str)
|
bug_str_cstr_term_char(VALUE str)
|
||||||
{
|
{
|
||||||
|
@ -41,6 +50,20 @@ bug_str_cstr_term_char(VALUE str)
|
||||||
return rb_enc_uint_chr((unsigned int)c, enc);
|
return rb_enc_uint_chr((unsigned int)c, enc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
bug_str_s_cstr_term(VALUE self, VALUE str)
|
||||||
|
{
|
||||||
|
Check_Type(str, T_STRING);
|
||||||
|
return bug_str_cstr_term(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
bug_str_s_cstr_unterm(VALUE self, VALUE str, VALUE c)
|
||||||
|
{
|
||||||
|
Check_Type(str, T_STRING);
|
||||||
|
return bug_str_cstr_unterm(str, c);
|
||||||
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
bug_str_s_cstr_term_char(VALUE self, VALUE str)
|
bug_str_s_cstr_term_char(VALUE self, VALUE str)
|
||||||
{
|
{
|
||||||
|
@ -52,6 +75,9 @@ void
|
||||||
Init_cstr(VALUE klass)
|
Init_cstr(VALUE klass)
|
||||||
{
|
{
|
||||||
rb_define_method(klass, "cstr_term", bug_str_cstr_term, 0);
|
rb_define_method(klass, "cstr_term", bug_str_cstr_term, 0);
|
||||||
|
rb_define_method(klass, "cstr_unterm", bug_str_cstr_unterm, 1);
|
||||||
rb_define_method(klass, "cstr_term_char", bug_str_cstr_term_char, 0);
|
rb_define_method(klass, "cstr_term_char", bug_str_cstr_term_char, 0);
|
||||||
|
rb_define_singleton_method(klass, "cstr_term", bug_str_s_cstr_term, 1);
|
||||||
|
rb_define_singleton_method(klass, "cstr_unterm", bug_str_s_cstr_unterm, 2);
|
||||||
rb_define_singleton_method(klass, "cstr_term_char", bug_str_s_cstr_term_char, 1);
|
rb_define_singleton_method(klass, "cstr_term_char", bug_str_s_cstr_term_char, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,13 @@ class Test_StringCStr < Test::Unit::TestCase
|
||||||
def test_embed
|
def test_embed
|
||||||
s = Bug::String.new("abcdef")
|
s = Bug::String.new("abcdef")
|
||||||
s.set_len(3)
|
s.set_len(3)
|
||||||
|
s.cstr_unterm('x')
|
||||||
assert_equal(0, s.cstr_term, Bug4319)
|
assert_equal(0, s.cstr_term, Bug4319)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_long
|
def test_long
|
||||||
s = Bug::String.new("abcdef")*100000
|
s = Bug::String.new("abcdef")*100000
|
||||||
|
s.cstr_unterm('x')
|
||||||
assert_equal(0, s.cstr_term, Bug4319)
|
assert_equal(0, s.cstr_term, Bug4319)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -20,9 +22,11 @@ class Test_StringCStr < Test::Unit::TestCase
|
||||||
def test_wchar_embed
|
def test_wchar_embed
|
||||||
WCHARS.each do |enc|
|
WCHARS.each do |enc|
|
||||||
s = Bug::String.new("\u{4022}a".encode(enc))
|
s = Bug::String.new("\u{4022}a".encode(enc))
|
||||||
|
s.cstr_unterm('x')
|
||||||
assert_nothing_raised(ArgumentError) {s.cstr_term}
|
assert_nothing_raised(ArgumentError) {s.cstr_term}
|
||||||
s.set_len(s.bytesize / 2)
|
s.set_len(s.bytesize / 2)
|
||||||
assert_equal(1, s.size)
|
assert_equal(1, s.size)
|
||||||
|
s.cstr_unterm('x')
|
||||||
assert_equal(0, s.cstr_term)
|
assert_equal(0, s.cstr_term)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -33,9 +37,11 @@ class Test_StringCStr < Test::Unit::TestCase
|
||||||
len = str.size * n
|
len = str.size * n
|
||||||
WCHARS.each do |enc|
|
WCHARS.each do |enc|
|
||||||
s = Bug::String.new(str.encode(enc))*n
|
s = Bug::String.new(str.encode(enc))*n
|
||||||
|
s.cstr_unterm('x')
|
||||||
assert_nothing_raised(ArgumentError, enc.name) {s.cstr_term}
|
assert_nothing_raised(ArgumentError, enc.name) {s.cstr_term}
|
||||||
s.set_len(s.bytesize / 2)
|
s.set_len(s.bytesize / 2)
|
||||||
assert_equal(len / 2, s.size, enc.name)
|
assert_equal(len / 2, s.size, enc.name)
|
||||||
|
s.cstr_unterm('x')
|
||||||
assert_equal(0, s.cstr_term, enc.name)
|
assert_equal(0, s.cstr_term, enc.name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue