From 466d770f8f1f0ff45251cf4774ca80585727ecf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Mon, 13 May 2024 14:59:09 +0200 Subject: [PATCH 1/2] Fix `Rang#size` return type to `Int32` --- src/range.cr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/range.cr b/src/range.cr index db1b3f32902a..81e0ddf0dd6f 100644 --- a/src/range.cr +++ b/src/range.cr @@ -482,7 +482,7 @@ struct Range(B, E) # (3..8).size # => 6 # (3...8).size # => 5 # ``` - def size + def size : Int32 b = self.begin e = self.end @@ -490,7 +490,7 @@ struct Range(B, E) if b.is_a?(Int) && e.is_a?(Int) e -= 1 if @exclusive n = e - b + 1 - n < 0 ? 0 : n + n < 0 ? 0 : n.to_i32 else if b.nil? || e.nil? raise ArgumentError.new("Can't calculate size of an open range") From 13bfaf4ae06b06d6734b3b02651a8e93fea5f550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20M=C3=BCller?= Date: Fri, 24 May 2024 22:47:43 +0200 Subject: [PATCH 2/2] Add documentation about error behaviour --- src/range.cr | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/range.cr b/src/range.cr index 81e0ddf0dd6f..228926e8bfac 100644 --- a/src/range.cr +++ b/src/range.cr @@ -482,6 +482,9 @@ struct Range(B, E) # (3..8).size # => 6 # (3...8).size # => 5 # ``` + # + # Raises `OverflowError` if the difference is bigger than `Int32`. + # Raises `ArgumentError` if either `begin` or `end` are `nil`. def size : Int32 b = self.begin e = self.end