[ruby-core:109499] [Ruby master Feature#18368] Range#step semantics for non-Numeric ranges
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-08-16 15:06:52 UTC
List:
ruby-core #109499
SXNzdWUgIzE4MzY4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp LgoKClRoYW5rcywgQG1hbWUsIGZvciBhIHN1bW1hcnkuCgpJJ2QgbGlrZSB0byBlbXBoYXNpemUs IHRob3VnaCwgdGhhdCB0aGUgInVuZGVzaXJhYmlsaXR5IiBvZiB1bmRlc2lyYWJsZSBiZWhhdmlv ciBsb29rcyB2ZXJ5IG1pbGQgdG8gbWU6CgoxLiBJIGRvbid0IHNlZSBob3cgc29tZXRoaW5nIGxp a2UgdGhpcyBjYW4gaGFwcGVuIGFjY2lkZW50YWxseSAoc2F2ZSBmb3Igc29tZSB2ZXJ5IHdlaXJk IGNvZGUgdGhhdCBkb2VzIGByYW5nZV9wYXNzZWRfYnlfdXNlci5zdGVwKHZhbHVlX3Bhc3NlZF9i eV91c2VyKWAgYW5kIGRlbGliZXJhdGVseSAqKnJlbGllcyoqIG9uIHRoZSBlcnJvciBiZWluZyBy YWlzZWQgZm9yIHZhbHVlcyB3aXRoIHRoZSBzZW1hbnRpY3Mgb2YgYCtgIGJlaW5nIG90aGVyIHRo YW4gYWRkaXRpb24pCjIuIFdoZW4gc29tZWJvZHkgY29uc2Npb3VzbHkgdHJpZXMgdG8gdXNlIGAj c3RlcGAgKG9yIGAjb3ZlcmApIHdpdGggYXJyYXlzLCBJIGRvbid0IHNlZSBob3cgdGhlIHJlc3Vs dHMgd291bGQgYmUgY29uZnVzaW5nOiAiaXQganVzdCB1c2VzIGArYCIgaXMgcmVhbGx5IGVhc3kg dG8gZXhwbGFpbiBhbmQgdW5kZXJzdGFuZAozLiBJdCBpcyByYXRoZXIgYSB0aGluZyB0aGF0IGNh biBicmluZyBhY2NpZGVudGFsIGpveSBieSBpdHMgc2ltcGxlIGNvbnNpc3RlbmN5LCBhcyBzaG93 biBpbiBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTgzNjgjbm90ZS01CgotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE4MzY4OiBSYW5n ZSNzdGVwIHNlbWFudGljcyBmb3Igbm9uLU51bWVyaWMgcmFuZ2VzCmh0dHBzOi8vYnVncy5ydWJ5 LWxhbmcub3JnL2lzc3Vlcy8xODM2OCNjaGFuZ2UtOTg2NjcKCiogQXV0aG9yOiB6dmVyb2sgKFZp Y3RvciBTaGVwZWxldikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSSBhbSBzb3JyeSBpZiB0aGUgcXVlc3Rp b24gaGFkIGFscmVhZHkgYmVlbiBkaXNjdXNzZWQsIGNhbid0IGZpbmQgdGhlIHJlbGV2YW50IHRv cGljLgoKIkludHVpdGl2ZWx5IiwgdGhpcyBsb29rcyAoZm9yIG1lKSBsaWtlIGEgbWVhbmluZ2Z1 bCBzdGF0ZW1lbnQ6CgpgYGBydWJ5CihUaW1lLnBhcnNlKCcyMDIxLTEyLTAxJykuLlRpbWUucGFy c2UoJzIwMjEtMTItMjQnKSkuc3RlcCgxLmRheSkudG9fYQojICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl4gb3IganVzdCAyNCo2MCo2 MApgYGAKVW5mb3J0dW5hdGVseSwgaXQgZG9lc24ndCB3b3JrIHdpdGggIlR5cGVFcnJvciAoY2Fu J3QgaXRlcmF0ZSBmcm9tIFRpbWUpIi4KSW5pdGlhbGx5IGl0IGxvb2tlZCBsaWtlIGEgYnVnIGZv ciBtZSwgYnV0IGFmdGVyIGRpZ2dpbmcgYSBiaXQgaW50byBjb2RlL2RvY3MsIEkgdW5kZXJzdG9v ZCB0aGF0IGBSYW5nZSNzdGVwYCBoYXMgYW4gb2RkIHNlbWFudGljcyBvZiAiYWR2YW5jZSB0aGUg YmVnaW4gTiB0aW1lcyB3aXRoIGAjc3VjY2AsIGFuZCB5aWVsZCB0aGUgcmVzdWx0Iiwgd2l0aCBO IGJlaW5nIGFsd2F5cyBpbnRlZ2VyOgpgYGBydWJ5CignYScuLid6Jykuc3RlcCgzKS5maXJzdCg1 KQojID0+IFsiYSIsICJkIiwgImciLCAiaiIsICJtIl0KYGBgCgpUaGUgZmFjdCB0aGF0IHNlbWFu dGljIGlzICJvZGQiIGlzIGNvbmZpcm1lZCBieSB0aGUgZmFjdCB0aGF0IGZvciBGbG9hdCBpdCBp cyByZWRlZmluZWQgdG8gZG8gd2hhdCBJICJpbnR1aXRpdmVseSIgZXhwZWN0ZWQ6CmBgYHJ1YnkK KDEuMC4uNy4wKS5zdGVwKDAuMykuZmlyc3QoNSkKIyA9PiBbMS4wLCAxLjMsIDEuNiwgMS45LCAy LjJdIApgYGAKKExpa2Ugd2l0aCBbYFJhbmdlIz09PWAgc29tZSB0aW1lIGFnb10oaHR0cHM6Ly9i dWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE0NTc1KSwgSSBiZWxpZXZlIHRoYXQgdG8gYmUgYSBz dHJvbmcgcHJvb2Ygb2YgdGhlIHdyb25nIGdlbmVyaWMgc2VtYW50aWNzLCBpZiBmb3IgbnVtYmVy cyB0aGUgc2VtYW50aWNzIG5lZWRlZCB0byBiZSByZWRlZmluZWQgY29tcGxldGVseS4pCgpBbm90 aGVyIHRoaW5nIHRvIG5vdGUgaXMgdGhhdCAic2tpcCBOIGVsZW1lbnRzIiBzZWVtIHRvIGJlIHJh dGhlciAiZ2VuZXJpY2FsbHkgRW51bWVyYWJsZS1yZWxhdGVkIiB5ZXQgaXQgaXNuJ3QgZGVmaW5l ZCBvbiBgRW51bWVyYWJsZWAgKGJlY2F1c2Ugbm9ib2R5IG5lZWRzIHRoaXMgc2VtYW50aWNzLCB0 eXBpY2FsbHkhKQoKSGVuY2UsIHR3byBxdWVzdGlvbnM6CiogQ2FuIHdlIHJlZGVmaW5lIGdlbmVy aWMgYFJhbmdlI3N0ZXBgIHRvIG5ldyBzZW1hbnRpY3MgKG9mIHVzaW5nIGBiZWdpbiArIHN0ZXBg IGl0ZXJhdGl2ZWx5KT8gSXQgaXMgaGFyZCB0byBpbWFnaW5lIHRoZSBhbW91bnQgb2YgYWN0dWFs IHVzYWdlIG9mIHRoZSBvbGQgYmVoYXZpb3IgKHdpdGggU3RyaW5nPy4uIHRvIHdoYXQgZW5kPykg aW4gdGhlIHdpbGQKKiBJZiB0aGUgYW5zd2VyIGlzICJubyIsIGNhbiB3ZSBkZWZpbmUgYSBuZXcg bWV0aG9kIHdpdGggbmV3IHNlbWFudGljcywgbGlrZSwgSURLLCBgUmFuZ2Ujb3ZlcihzcGFuKWA/ CgoqKlVQRDoqKiBNb3JlIGV4YW1wbGVzIG9mIHVzZWZ1bCBiZWhhdmlvciAoaXQgaXMgTk9UIG9u bHkgYWJvdXQgY29yZSBgVGltZWAgY2xhc3MpOgoKYGBgcnVieQpyZXF1aXJlICdhY3RpdmVfc3Vw cG9ydC9hbGwnCgooMS5taW51dGUuLjIwLm1pbnV0ZXMpLnN0ZXAoMi5taW51dGVzKS50b19hCiM9 PiBbMSBtaW51dGUsIDMgbWludXRlcywgNSBtaW51dGVzLCA3IG1pbnV0ZXMsIDkgbWludXRlcywg MTEgbWludXRlcywgMTMgbWludXRlcywgMTUgbWludXRlcywgMTcgbWludXRlcywgMTkgbWludXRl c10KCnJlcXVpcmUgJ3RvZCcKCihUb2Q6OlRpbWVPZkRheS5wYXJzZSgiOGFtIikuLlRvZDo6VGlt ZU9mRGF5LnBhcnNlKCIxMGFtIikpLnN0ZXAoMzAubWludXRlcykudG9fYSAKIz0+IFsjPFRvZDo6 VGltZU9mRGF5IDA4OjAwOjAwPiwgIzxUb2Q6OlRpbWVPZkRheSAwODozMDowMD4sICM8VG9kOjpU aW1lT2ZEYXkgMDk6MDA6MDA+LCAjPFRvZDo6VGltZU9mRGF5IDA5OjMwOjAwPiwgIzxUb2Q6OlRp bWVPZkRheSAxMDowMDowMD5dCgoKcmVxdWlyZSAnbWF0cml4JwooVmVjdG9yWzEsIDIsIDNdLi4p LnN0ZXAoVmVjdG9yWzEsIDEsIDFdKS50YWtlKDMpCiM9PiBbVmVjdG9yWzEsIDIsIDNdLCBWZWN0 b3JbMiwgMywgNF0sIFZlY3RvclszLCA0LCA1XV0KCnJlcXVpcmUgJ3VuaXR3aXNlJwooVW5pdHdp c2UoMCwgJ2ttJykuLlVuaXR3aXNlKDEsICdrbScpKS5zdGVwKFVuaXR3aXNlKDEwMCwgJ20nKSku bWFwKCY6dG9fcykKIz0+IFsiMCBrbSIsICIxLzEwIGttIiwgIjEvNSBrbSIsICIzLzEwIGttIiwg IjIvNSBrbSIsICIwLjUga20iLCAiMy81IGttIiwgIjcvMTAga20iLCAiNC81IGttIiwgIjkvMTAg a20iLCAiMSBrbSJdCmBgYAoKCioqVVBEOioqIFJlc3BvbmRpbmcgdG8gZGlzY3Vzc2lvbiBwb2lu dHM6CgoqKlE6KiogTWF0eiBpcyBjb25jZXJuZWQgdGhhdCB0aGUgcHJvcG9zZWQgc2ltcGxlIGRl ZmluaXRpb24gd2lsbCBiZSBjb25mdXNpbmcgd2l0aCB0aGUgY2xhc3NlcyB3aGVyZSBgK2AgaXMg cmVkZWZpbmVkIGFzIGNvbmNhdGVuYXRpb24uCgoqKkE6KiogSSBiZWxpZXZlIHRoYXQgc2ltcGxp Y2l0eSBvZiBzZW1hbnRpY3MgYW5kIGVhc2Ugb2YgZXhwbGFpbmluZyAoIml0IGp1c3QgdXNlcyBg K2AgdW5kZXJuZWF0aCwgd2hhdGV2ZXIgYCtgIGRvZXMsIHdpbGwgYmUgcGVyZm9ybWVkIikgd2ls bCBtYWtlIHRoZSBjb25mdXNpb24gbWluaW1hbC4KCioqUToqKiBXaHkgbm90IGludHJvZHVjZSBu ZXcgQVBJIHJlcXVpcmVtZW50IChsaWtlICJjbGFzcyBvZiByYW5nZSdzIGBiZWdpbmAgc2hvdWxk IGltcGxlbWVudCBgaW5jcmVtZW50YCBtZXRob2QsIGFuZCB0aGVuIGl0IHdpbGwgYmUgdXNlZCBp biBgc3RlcGApCgoqKkE6KiogcmVxdWlyZSAqZXZlcnkqIGdlbSBhdXRob3IgdG8gY2hhbmdlICpl dmVyeSogb2YgdGhlaXIgb2JqZWN0cycgYmVoYXZpb3IuIEZvciB0aGF0LCB0aGV5IHNob3VsZCBi ZSBhd2FyZSBvZiB0aGUgY2hhbmdlLCBjb25zaWRlciBpdCBpbXBvcnRhbnQgZW5vdWdoIHRvIGNh cmUsIGNsZWFybHkgdW5kZXJzdGFuZCB0aGUgbmVjZXNzYXJ5IHNlbWFudGljcyBvZiBpbXBsZW1l bnRhdGlvbiwgaGF2ZSBhIHJlc291cmNlIHRvIHJlbGVhc2UgYSBuZXcgdmVyc2lvbi4uLiBUaGVu IGFsbCB1c2VycyBvZiBhbGwgc3VjaCBnZW1zIHdvdWxkIGJlIHJlcXVpcmVkIHRvIHVwZ3JhZGUu IFRoZSBmZWF0dXJlIHdvdWxkIGJlIERPQSAoZGVhZC1vbi1hcnJpdmFsKS4KClRoZSB0d28gYWx0 ZXJuYXRpdmUgd2F5cyBJIGFtIHN1Z2dlc3Rpbmc6IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYCNz dGVwYCBvciBpbnRyb2R1Y2UgYSBuZXcgbWV0aG9kIHdpdGggZGVzaXJlZCBiZWhhdmlvcjoKMS4g RWFzeSB0byBleHBsYWluIGFuZCBhbm5vdW5jZQoyLiBSZXF1aXJlIG5vIG90aGVyIGNvZGUgY2hh bmdlcyB0byBpbW1lZGlhdGVseSBiZWNvbWUgdXNlZnVsCjMuIFdpdGggc29tZXRoaW5nIGxpa2Ug W2JhY2twb3J0c10oaHR0cHM6Ly9naXRodWIuY29tL21hcmNhbmRyZS9iYWNrcG9ydHMpIG9yIFty dWJ5LW5leHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5LW5leHQvcnVieS1uZXh0KSBlYXN5IHRv IHN0YXJ0IHVzaW5nIGV2ZW4gaW4gb2xkZXIgUnVieSB2ZXJzaW9uLCBtYWtpbmcgdGhlIGNvZGUg bW9yZSBleHByZXNzaXZlIGV2ZW4gYmVmb3JlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciBzb21l IHBhcnRpY3VsYXIgYXBwL2NvbXBueSB0byB1cGdyYWRlIHRvIChzYXkpIDMuMgoKQWxsIGV4YW1w bGVzIG9mIGJlaGF2aW9yIGZyb20gdGhlIGNvZGUgYWJvdmUgYXJlIHJlYWwgYGlyYmAgb3V0cHV0 IHdpdGggbW9ua2V5LXBhdGNoZWQgYFJhbmdlI3N0ZXBgLCBkZW1vbnN0cmF0aW5nIGhvdyBsaXR0 bGUgY2hhbmdlIHdpbGwgYmUgbmVlZGVkIHRvIGNvZGUgb3V0c2lkZSBvZiB0aGUgYFJhbmdlYC4K CgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86 cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0 cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3Jl Pgo=