[ruby-core:109496] [Ruby master Feature#18368] Range#step semantics for non-Numeric ranges
From:
"mame (Yusuke Endoh)" <noreply@...>
Date:
2022-08-16 14:45:22 UTC
List:
ruby-core #109496
SXNzdWUgIzE4MzY4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4NCg0K DQpMZXQgbWUgc3VtbWFyaXplIHRoZSBwcm9ibGVtIGFuZCBwb3NzaWJsZSBzb2x1dGlvbnMuDQoN CkRlc2lyYWJsZSBiZWhhdmlvcjoNCg0KYGBgDQoodGltZXN0YW1wMS4uLnRpbWVzdGFtcDIpLnN0 ZXAoMy5ob3VycykgeyAuLi4gfQ0KKGRhdGUxLi5kYXRlMikuc3RlcCgxLmRheSkgeyAuLi4gfQ0K YGBgDQoNClVuZGVzaXJhYmxlIGJlaGF2aW9yOg0KDQpgYGANCihbXS4uKS5zdGVwKFsxXSkudGFr ZSgzKSAgICAgICAgIz0+IFtbXSwgWzFdLCBbMSwgMV1dDQooU2V0WzFdLi4pLnN0ZXAoU2V0WzJd KS50YWtlKDMpICM9PiBbU2V0WzFdLCBTZXRbMSwgMl0sIFNldFsxLDJdXQ0KYGBgDQoNClNvbHV0 aW9uIDE6IEdpdmUgdXAgdGhlIGRlc2lyYWJsZSBiZWhhdmlvciBhbmQga2VlcCB0aGUgY3VycmVu dCBzdGF0dXMNCiogUHJvcyBhbmQgY29ucyBhcmUgdHJpdmlhbA0KDQpTb2x1dGlvbiAyOiBDaGFu Z2UgYFJhbmdlI3N0ZXBgIHRvICIrIiBzZW1hbnRpY3MgYW5kIGFjY2VwdCB0aGUgdW5kZXNpcmFi bGUgYmVoYXZpb3INCiogYChhLi5iKS5zdGVwKGQpIHsuLi59YCDiiZIgYHdoaWxlIGEgPD0gYjsg Li4uOyBhICs9IGQ7IGVuZGANCiogUHJvcyBhbmQgY29ucyBhcmUgdHJpdmlhbA0KDQpTb2x1dGlv biAzOiBJbnRyb2R1Y2UgYSBuZXcgc3RlcC1saWtlIG1ldGhvZCBhcyAiKyIgc2VtYW50aWNzDQoq IGAoYS4uYikub3ZlcihkKSB7Li4ufWAg4omSIGB3aGlsZSBhIDw9IGI7IC4uLjsgYSArPSBkOyBl bmRgDQoqIFByb3M6IGBSYW5nZSNzdGVwYCBkb2VzIG5vdCBjaGFuZ2UgKG5laXRoZXIgZGVzaXJh YmxlIG9yIHVuZGVzaXJhYmxlIGJlaGF2aW9ycyBhcmUgaW50cm9kdWNlZCkgLyB3ZSBjYW4gdXNl IGBSYWduZSNvdmVyYCBmb3IgM3JkLXBhcnR5IGNsYXNzZXMgaW1wbGVtZW50aW5nIGArYCB3aXRo b3V0IG1vZGlmaWNhdGlvbg0KKiBDb25zOiB0aGUgdW5kZXNpcmFibGUgYmVoYXZpb3IgaXMgaW50 cm9kdWNlZCB0byBgUmFuZ2Ujb3ZlcmANCg0KU29sdXRpb24gNDogTWFrZSBgUmFuZ2Ujc3RlcGAg ZGVsZWdhdGUgdG8gYGJlZ2luI3N0ZXBgIG9yIGAjdXB0b2AgZm9yIHVua25vd24gdHlwZXMNCiog YChhLi5iKS5zdGVwKGQpIHsuLi59YCDiiZIgYGEuc3RlcChiLCBkKSB7Li4ufWANCiogYChhLi4u Yikuc3RlcChkKSB7Li4ufWAg4omSIGBhLnN0ZXAoYiwgZCwgZXhjbHVkZV9lbmQ6IHRydWUpIHsu Li59YA0KKiBvcg0KKiBgKGEuLmIpLnVwdG8oZCkgey4uLn1gIOKJkiBgYS51cHRvKGIsIGZhbHNl LCBieTogZCkgey4uLn1gDQoqIGAoYS4uLmIpLnVwdG8oZCkgey4uLn1gIOKJkiBgYS51cHRvKGIs IHRydWUsIGJ5OiBkKSB7Li4ufWANCiogUHJvczogdGhlIGRlc2lyYWJsZSBiZWhhdmlvciBpcyBp bnRyb2R1Y2VkIHdpdGhvdXQgdGhlIHVuZGVzaXJhYmxlIGJlaGF2aW9yDQoqIENvbnM6IDNyZC1w YXJ0eSBjbGFzc2VzIChhbmQgc29tZSBidWlsdGluIGNsYXNzZXMgbGlrZSBUaW1lKSBoYXZlIHRv IGltcGxlbWVudCBgI3N0ZXBgIG9yIGAjdXB0b2AgcHJvdG9jb2wNCg0KU29sdXRpb24gNTogTWFr ZSBgUmFuZ2Ujc3RlcGAgdXNlIGByYW5nZS5iZWdpbiNpbmNyZW1lbnRgIGZvciB1bmtub3duIHR5 cGVzDQoqIGAoYS4uYikuc3RlcChkKSB7Li4ufWAg4omSIGB3aGlsZSBhIDw9IGI7IC4uLjsgYSA9 IGEuaW5jcmVtZW50KGQpOyBlbmRgDQoqIFByb3M6IHRoZSBkZXNpcmFibGUgYmVoYXZpb3IgaXMg aW50cm9kdWNlZCB3aXRob3V0IHRoZSB1bmRlc2lyYWJsZSBiZWhhdmlvcg0KKiBDb25zOiBidWls dGluIGFuZCAzcmQtcGFydHkgY2xhc3NlcyBoYXZlIHRvIGltcGxlbWVudCB0aGUgbmV3IGAjaW5j cmVtZW50YCBwcm90b2NvbA0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCkZlYXR1cmUgIzE4MzY4OiBSYW5nZSNzdGVwIHNlbWFudGljcyBmb3Igbm9uLU51bWVy aWMgcmFuZ2VzDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTgzNjgjY2hhbmdl LTk4NjY0DQoNCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikNCiogU3RhdHVzOiBP cGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCkkgYW0gc29ycnkgaWYgdGhlIHF1ZXN0aW9uIGhhZCBhbHJlYWR5IGJlZW4gZGlz Y3Vzc2VkLCBjYW4ndCBmaW5kIHRoZSByZWxldmFudCB0b3BpYy4NCg0KIkludHVpdGl2ZWx5Iiwg dGhpcyBsb29rcyAoZm9yIG1lKSBsaWtlIGEgbWVhbmluZ2Z1bCBzdGF0ZW1lbnQ6DQoNCmBgYHJ1 YnkNCihUaW1lLnBhcnNlKCcyMDIxLTEyLTAxJykuLlRpbWUucGFyc2UoJzIwMjEtMTItMjQnKSku c3RlcCgxLmRheSkudG9fYQ0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF5eXl5eIG9yIGp1c3QgMjQqNjAqNjANCmBgYA0KVW5mb3J0dW5h dGVseSwgaXQgZG9lc24ndCB3b3JrIHdpdGggIlR5cGVFcnJvciAoY2FuJ3QgaXRlcmF0ZSBmcm9t IFRpbWUpIi4NCkluaXRpYWxseSBpdCBsb29rZWQgbGlrZSBhIGJ1ZyBmb3IgbWUsIGJ1dCBhZnRl ciBkaWdnaW5nIGEgYml0IGludG8gY29kZS9kb2NzLCBJIHVuZGVyc3Rvb2QgdGhhdCBgUmFuZ2Uj c3RlcGAgaGFzIGFuIG9kZCBzZW1hbnRpY3Mgb2YgImFkdmFuY2UgdGhlIGJlZ2luIE4gdGltZXMg d2l0aCBgI3N1Y2NgLCBhbmQgeWllbGQgdGhlIHJlc3VsdCIsIHdpdGggTiBiZWluZyBhbHdheXMg aW50ZWdlcjoNCmBgYHJ1YnkNCignYScuLid6Jykuc3RlcCgzKS5maXJzdCg1KQ0KIyA9PiBbImEi LCAiZCIsICJnIiwgImoiLCAibSJdDQpgYGANCg0KVGhlIGZhY3QgdGhhdCBzZW1hbnRpYyBpcyAi b2RkIiBpcyBjb25maXJtZWQgYnkgdGhlIGZhY3QgdGhhdCBmb3IgRmxvYXQgaXQgaXMgcmVkZWZp bmVkIHRvIGRvIHdoYXQgSSAiaW50dWl0aXZlbHkiIGV4cGVjdGVkOg0KYGBgcnVieQ0KKDEuMC4u Ny4wKS5zdGVwKDAuMykuZmlyc3QoNSkNCiMgPT4gWzEuMCwgMS4zLCAxLjYsIDEuOSwgMi4yXSAN CmBgYA0KKExpa2Ugd2l0aCBbYFJhbmdlIz09PWAgc29tZSB0aW1lIGFnb10oaHR0cHM6Ly9idWdz LnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE0NTc1KSwgSSBiZWxpZXZlIHRoYXQgdG8gYmUgYSBzdHJv bmcgcHJvb2Ygb2YgdGhlIHdyb25nIGdlbmVyaWMgc2VtYW50aWNzLCBpZiBmb3IgbnVtYmVycyB0 aGUgc2VtYW50aWNzIG5lZWRlZCB0byBiZSByZWRlZmluZWQgY29tcGxldGVseS4pDQoNCkFub3Ro ZXIgdGhpbmcgdG8gbm90ZSBpcyB0aGF0ICJza2lwIE4gZWxlbWVudHMiIHNlZW0gdG8gYmUgcmF0 aGVyICJnZW5lcmljYWxseSBFbnVtZXJhYmxlLXJlbGF0ZWQiIHlldCBpdCBpc24ndCBkZWZpbmVk IG9uIGBFbnVtZXJhYmxlYCAoYmVjYXVzZSBub2JvZHkgbmVlZHMgdGhpcyBzZW1hbnRpY3MsIHR5 cGljYWxseSEpDQoNCkhlbmNlLCB0d28gcXVlc3Rpb25zOg0KKiBDYW4gd2UgcmVkZWZpbmUgZ2Vu ZXJpYyBgUmFuZ2Ujc3RlcGAgdG8gbmV3IHNlbWFudGljcyAob2YgdXNpbmcgYGJlZ2luICsgc3Rl cGAgaXRlcmF0aXZlbHkpPyBJdCBpcyBoYXJkIHRvIGltYWdpbmUgdGhlIGFtb3VudCBvZiBhY3R1 YWwgdXNhZ2Ugb2YgdGhlIG9sZCBiZWhhdmlvciAod2l0aCBTdHJpbmc/Li4gdG8gd2hhdCBlbmQ/ KSBpbiB0aGUgd2lsZA0KKiBJZiB0aGUgYW5zd2VyIGlzICJubyIsIGNhbiB3ZSBkZWZpbmUgYSBu ZXcgbWV0aG9kIHdpdGggbmV3IHNlbWFudGljcywgbGlrZSwgSURLLCBgUmFuZ2Ujb3ZlcihzcGFu KWA/DQoNCioqVVBEOioqIE1vcmUgZXhhbXBsZXMgb2YgdXNlZnVsIGJlaGF2aW9yIChpdCBpcyBO T1Qgb25seSBhYm91dCBjb3JlIGBUaW1lYCBjbGFzcyk6DQoNCmBgYHJ1YnkNCnJlcXVpcmUgJ2Fj dGl2ZV9zdXBwb3J0L2FsbCcNCg0KKDEubWludXRlLi4yMC5taW51dGVzKS5zdGVwKDIubWludXRl cykudG9fYQ0KIz0+IFsxIG1pbnV0ZSwgMyBtaW51dGVzLCA1IG1pbnV0ZXMsIDcgbWludXRlcywg OSBtaW51dGVzLCAxMSBtaW51dGVzLCAxMyBtaW51dGVzLCAxNSBtaW51dGVzLCAxNyBtaW51dGVz LCAxOSBtaW51dGVzXQ0KDQpyZXF1aXJlICd0b2QnDQoNCihUb2Q6OlRpbWVPZkRheS5wYXJzZSgi OGFtIikuLlRvZDo6VGltZU9mRGF5LnBhcnNlKCIxMGFtIikpLnN0ZXAoMzAubWludXRlcykudG9f YSANCiM9PiBbIzxUb2Q6OlRpbWVPZkRheSAwODowMDowMD4sICM8VG9kOjpUaW1lT2ZEYXkgMDg6 MzA6MDA+LCAjPFRvZDo6VGltZU9mRGF5IDA5OjAwOjAwPiwgIzxUb2Q6OlRpbWVPZkRheSAwOToz MDowMD4sICM8VG9kOjpUaW1lT2ZEYXkgMTA6MDA6MDA+XQ0KDQoNCnJlcXVpcmUgJ21hdHJpeCcN CihWZWN0b3JbMSwgMiwgM10uLikuc3RlcChWZWN0b3JbMSwgMSwgMV0pLnRha2UoMykNCiM9PiBb VmVjdG9yWzEsIDIsIDNdLCBWZWN0b3JbMiwgMywgNF0sIFZlY3RvclszLCA0LCA1XV0NCg0KcmVx dWlyZSAndW5pdHdpc2UnDQooVW5pdHdpc2UoMCwgJ2ttJykuLlVuaXR3aXNlKDEsICdrbScpKS5z dGVwKFVuaXR3aXNlKDEwMCwgJ20nKSkubWFwKCY6dG9fcykNCiM9PiBbIjAga20iLCAiMS8xMCBr bSIsICIxLzUga20iLCAiMy8xMCBrbSIsICIyLzUga20iLCAiMC41IGttIiwgIjMvNSBrbSIsICI3 LzEwIGttIiwgIjQvNSBrbSIsICI5LzEwIGttIiwgIjEga20iXQ0KYGBgDQoNCg0KKipVUEQ6Kiog UmVzcG9uZGluZyB0byBkaXNjdXNzaW9uIHBvaW50czoNCg0KKipROioqIE1hdHogaXMgY29uY2Vy bmVkIHRoYXQgdGhlIHByb3Bvc2VkIHNpbXBsZSBkZWZpbml0aW9uIHdpbGwgYmUgY29uZnVzaW5n IHdpdGggdGhlIGNsYXNzZXMgd2hlcmUgYCtgIGlzIHJlZGVmaW5lZCBhcyBjb25jYXRlbmF0aW9u Lg0KDQoqKkE6KiogSSBiZWxpZXZlIHRoYXQgc2ltcGxpY2l0eSBvZiBzZW1hbnRpY3MgYW5kIGVh c2Ugb2YgZXhwbGFpbmluZyAoIml0IGp1c3QgdXNlcyBgK2AgdW5kZXJuZWF0aCwgd2hhdGV2ZXIg YCtgIGRvZXMsIHdpbGwgYmUgcGVyZm9ybWVkIikgd2lsbCBtYWtlIHRoZSBjb25mdXNpb24gbWlu aW1hbC4NCg0KKipROioqIFdoeSBub3QgaW50cm9kdWNlIG5ldyBBUEkgcmVxdWlyZW1lbnQgKGxp a2UgImNsYXNzIG9mIHJhbmdlJ3MgYGJlZ2luYCBzaG91bGQgaW1wbGVtZW50IGBpbmNyZW1lbnRg IG1ldGhvZCwgYW5kIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluIGBzdGVwYCkNCg0KKipBOioqIHJl cXVpcmUgKmV2ZXJ5KiBnZW0gYXV0aG9yIHRvIGNoYW5nZSAqZXZlcnkqIG9mIHRoZWlyIG9iamVj dHMnIGJlaGF2aW9yLiBGb3IgdGhhdCwgdGhleSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIGNoYW5n ZSwgY29uc2lkZXIgaXQgaW1wb3J0YW50IGVub3VnaCB0byBjYXJlLCBjbGVhcmx5IHVuZGVyc3Rh bmQgdGhlIG5lY2Vzc2FyeSBzZW1hbnRpY3Mgb2YgaW1wbGVtZW50YXRpb24sIGhhdmUgYSByZXNv dXJjZSB0byByZWxlYXNlIGEgbmV3IHZlcnNpb24uLi4gVGhlbiBhbGwgdXNlcnMgb2YgYWxsIHN1 Y2ggZ2VtcyB3b3VsZCBiZSByZXF1aXJlZCB0byB1cGdyYWRlLiBUaGUgZmVhdHVyZSB3b3VsZCBi ZSBET0EgKGRlYWQtb24tYXJyaXZhbCkuDQoNClRoZSB0d28gYWx0ZXJuYXRpdmUgd2F5cyBJIGFt IHN1Z2dlc3Rpbmc6IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYCNzdGVwYCBvciBpbnRyb2R1Y2Ug YSBuZXcgbWV0aG9kIHdpdGggZGVzaXJlZCBiZWhhdmlvcjoNCjEuIEVhc3kgdG8gZXhwbGFpbiBh bmQgYW5ub3VuY2UNCjIuIFJlcXVpcmUgbm8gb3RoZXIgY29kZSBjaGFuZ2VzIHRvIGltbWVkaWF0 ZWx5IGJlY29tZSB1c2VmdWwNCjMuIFdpdGggc29tZXRoaW5nIGxpa2UgW2JhY2twb3J0c10oaHR0 cHM6Ly9naXRodWIuY29tL21hcmNhbmRyZS9iYWNrcG9ydHMpIG9yIFtydWJ5LW5leHRdKGh0dHBz Oi8vZ2l0aHViLmNvbS9ydWJ5LW5leHQvcnVieS1uZXh0KSBlYXN5IHRvIHN0YXJ0IHVzaW5nIGV2 ZW4gaW4gb2xkZXIgUnVieSB2ZXJzaW9uLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSBleHByZXNzaXZl IGV2ZW4gYmVmb3JlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciBzb21lIHBhcnRpY3VsYXIgYXBw L2NvbXBueSB0byB1cGdyYWRlIHRvIChzYXkpIDMuMg0KDQpBbGwgZXhhbXBsZXMgb2YgYmVoYXZp b3IgZnJvbSB0aGUgY29kZSBhYm92ZSBhcmUgcmVhbCBgaXJiYCBvdXRwdXQgd2l0aCBtb25rZXkt cGF0Y2hlZCBgUmFuZ2Ujc3RlcGAsIGRlbW9uc3RyYXRpbmcgaG93IGxpdHRsZSBjaGFuZ2Ugd2ls bCBiZSBuZWVkZWQgdG8gY29kZSBvdXRzaWRlIG9mIHRoZSBgUmFuZ2VgLg0KDQoNCg0KLS0gDQpo dHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNv cmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlz dHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==