From 994d9ac89e6089bedd70dcb0edf3eaa62b9595ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Pet=C3=B6?= Date: Tue, 9 Jan 2018 20:27:07 +0100 Subject: [PATCH 1/3] Fix Time::Span multiply and divide --- src/time/span.cr | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/time/span.cr b/src/time/span.cr index e9e5e28218da..f19ae2c53668 100644 --- a/src/time/span.cr +++ b/src/time/span.cr @@ -291,15 +291,21 @@ struct Time::Span end # Returns a `Time::Span` that is *number* times longer. - def *(number : Number) : Time::Span + def *(number : Int) : Time::Span # TODO check overflow Span.new( - seconds: to_i.to_i64 * number, + seconds: to_i * number, nanoseconds: nanoseconds.to_i64 * number, ) end - def /(number : Number) : Time::Span + # Returns a `Time::Span` that is *number* times longer. + def *(number : Float) : Time::Span + (total_nanoseconds * number).nanoseconds + end + + # Return a `Time::Span` that is divided by *number*. + def /(number : Int) : Time::Span seconds = to_i.tdiv(number) nanoseconds = self.nanoseconds.tdiv(number) @@ -313,6 +319,11 @@ struct Time::Span ) end + # Returns a `Time::Span` that is divided by *number*. + def /(number : Float) : Time::Span + (total_nanoseconds / number).nanoseconds + end + def /(other : self) : Float64 total_nanoseconds.to_f64 / other.total_nanoseconds.to_f64 end From 0783e0619f6ba847201d59fbb3a3a1d498b5fcec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Pet=C3=B6?= Date: Tue, 9 Jan 2018 22:14:57 +0100 Subject: [PATCH 2/3] Add spec for Float --- spec/std/time/span_spec.cr | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/std/time/span_spec.cr b/spec/std/time/span_spec.cr index e5905839b9c5..15fadeb05b52 100644 --- a/spec/std/time/span_spec.cr +++ b/spec/std/time/span_spec.cr @@ -198,8 +198,10 @@ describe Time::Span do it "test multiply" do t1 = Time::Span.new 5, 4, 3, 2, 1_000_000 t2 = t1 * 61 + t3 = t1 * 0.5 t2.should eq(Time::Span.new 315, 7, 5, 2, 61_000_000) + t3.should eq(Time::Span.new 2, 14, 1, 31, 500_000) # TODO check overflow end @@ -207,8 +209,10 @@ describe Time::Span do it "test divide" do t1 = Time::Span.new 3, 3, 3, 3, 3_000_000 t2 = t1 / 2 + t3 = t1 / 1.5 t2.should eq(Time::Span.new(1, 13, 31, 31, 501_000_000) + Time::Span.new(nanoseconds: 500_000)) + t3.should eq(Time::Span.new 2, 2, 2, 2, 2_000_000) # TODO check overflow end From 5cf81537bb7510c0758e67c2cd1e78b479a827eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Pet=C3=B6?= Date: Tue, 9 Jan 2018 22:18:09 +0100 Subject: [PATCH 3/3] Fix typo in comment --- src/time/span.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/time/span.cr b/src/time/span.cr index f19ae2c53668..894af5eb33cb 100644 --- a/src/time/span.cr +++ b/src/time/span.cr @@ -304,7 +304,7 @@ struct Time::Span (total_nanoseconds * number).nanoseconds end - # Return a `Time::Span` that is divided by *number*. + # Returns a `Time::Span` that is divided by *number*. def /(number : Int) : Time::Span seconds = to_i.tdiv(number) nanoseconds = self.nanoseconds.tdiv(number)