From: nobu@... Date: 2015-08-09T08:09:21+00:00 Subject: [ruby-core:70280] [Ruby trunk - Bug #11406] Inconsistent behavior when creating a range of strings which end in an integer greater than 10 Issue #11406 has been updated by Nobuyoshi Nakada. Hans Mackowiak wrote: > i think that might break some things ... (it might break some applications) > > like with "1.2.9".succ, i dont know if that still work `String#succ` isn't changed at all with my patch, but only `String#upto` when the receiver and the limit share common prefix and numerical suffixes. The case affected is that alphabetical part is followed by the numerical suffix. E.g., ~~~ruby "1a2b9".upto("1a2b10").to_a ~~~ returns an empty array now, but `["1a2b9", "1a2b10"]` with this patch. In other words, your example has been handled specially already. ---------------------------------------- Bug #11406: Inconsistent behavior when creating a range of strings which end in an integer greater than 10 https://bugs.ruby-lang.org/issues/11406#change-53704 * Author: Michael Martinez * Status: Open * Priority: Normal * Assignee: * ruby -v: 2.2.2 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- # Steps to Reproduce In Ruby v2.2.2 1. Create a range of strings using 'foo1' up to 'foo9': ~~~ruby ('foo1'..'foo9').to_a => ["foo1", "foo2", "foo3", "foo4", "foo5", "foo6", "foo7", "foo8", "foo9"] ~~~ Observe the results are as we expect 2. Create a range of strings using 'foo1' up to 'foo10' ~~~ruby ('foo1'..'foo10').to_a => ["foo1", "foo2","foo3","foo4","foo5", "foo6", "foo7", "foo8", "foo9", "fop0","fop1", "fop2", "fop3", "fop4", "fop5", "fop6", "fop7", "fop8", "fop9", "foq0", ....] ~~~ Also: ~~~ruby ('foo1'..'foo10').to_a.size => 4707939 ~~~ Observe that the output loops `1..9` about 523104 times (arbitrarily?) # Expected Results The output in step 1 makes me expect for Ruby's range class to intelligently create ranges using a strings that include integers inside them. However this only seems to work for `1..9` ranges. # Actual Results Inconsistent behavior for range creation. ---Files-------------------------------- Screen Shot 2015-07-29 at 5.40.16 PM.png (54.4 KB) -- https://bugs.ruby-lang.org/