ruby-changes:41597
From: naruse <ko1@a...>
Date: Wed, 27 Jan 2016 20:36:08 +0900 (JST)
Subject: [ruby-changes:41597] naruse:r53671 (trunk): Add tests about String's internal capacity
naruse 2016-01-27 20:37:02 +0900 (Wed, 27 Jan 2016) New Revision: 53671 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=53671 Log: Add tests about String's internal capacity Added files: trunk/ext/-test-/string/capacity.c trunk/test/-ext-/string/test_capacity.rb Index: ext/-test-/string/capacity.c =================================================================== --- ext/-test-/string/capacity.c (revision 0) +++ ext/-test-/string/capacity.c (revision 53671) @@ -0,0 +1,17 @@ https://github.com/ruby/ruby/blob/trunk/ext/-test-/string/capacity.c#L1 +#include "ruby.h" +#include "internal.h" + +static VALUE +bug_str_capacity(VALUE klass, VALUE str) +{ + return + STR_EMBED_P(str) ? INT2FIX(RSTRING_EMBED_LEN_MAX) : \ + STR_SHARED_P(str) ? INT2FIX(0) : \ + LONG2FIX(RSTRING(str)->as.heap.aux.capa); +} + +void +Init_capacity(VALUE klass) +{ + rb_define_singleton_method(klass, "capacity", bug_str_capacity, 1); +} Index: test/-ext-/string/test_capacity.rb =================================================================== --- test/-ext-/string/test_capacity.rb (revision 0) +++ test/-ext-/string/test_capacity.rb (revision 53671) @@ -0,0 +1,18 @@ https://github.com/ruby/ruby/blob/trunk/test/-ext-/string/test_capacity.rb#L1 +# frozen_string_literal: true +require 'test/unit' +require '-test-/string' + +class Test_StringCapacity < Test::Unit::TestCase + def test_capacity_embeded + size = RbConfig::SIZEOF['void*'] * 3 - 1 + assert_equal size, Bug::String.capacity('foo') + end + + def test_capacity_shared + assert_equal 0, Bug::String.capacity(:abcdefghijklmnopqrstuvwxyz.to_s) + end + + def test_capacity_normal + assert_equal 128, Bug::String.capacity('1'*128) + end +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/