From b0568427401ee9cea37f0199e529fc278b90dd38 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Tue, 26 Jun 2018 07:48:19 -0300 Subject: [PATCH] Add Time::Span#microseconds, Int#microseconds and Float#microseconds --- spec/std/time/span_spec.cr | 6 ++++++ src/time.cr | 3 +++ src/time/span.cr | 15 +++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/spec/std/time/span_spec.cr b/spec/std/time/span_spec.cr index 15fadeb05b52..7de063d2c7ee 100644 --- a/spec/std/time/span_spec.cr +++ b/spec/std/time/span_spec.cr @@ -100,6 +100,7 @@ describe Time::Span do t1.minutes.should eq(3) t1.seconds.should eq(4) t1.milliseconds.should eq(5) + t1.microseconds.should eq(5_000) t1.nanoseconds.should eq(5_000_000) t2.days.should eq(-1) @@ -107,6 +108,7 @@ describe Time::Span do t2.minutes.should eq(-3) t2.seconds.should eq(-4) t2.milliseconds.should eq(-5) + t2.microseconds.should eq(-5_000) t2.nanoseconds.should eq(-5_000_000) end @@ -154,6 +156,8 @@ describe Time::Span do it "test int extension methods" do 1_000_000.days.to_s.should eq("1000000.00:00:00") + 12.microseconds.to_s.should eq("00:00:00.000012000") + -12.microseconds.to_s.should eq("-00:00:00.000012000") end it "test float extension methods" do @@ -166,6 +170,8 @@ describe Time::Span do 0.5.milliseconds.to_s.should eq("00:00:00.000500000") -2.5.milliseconds.to_s.should eq("-00:00:00.002500000") 2.5.milliseconds.to_s.should eq("00:00:00.002500000") + -2.5.microseconds.to_s.should eq("-00:00:00.000002500") + 2.5.microseconds.to_s.should eq("00:00:00.000002500") 0.0005.seconds.to_s.should eq("00:00:00.000500000") 1_000_000.5.days.to_s.should eq("1000000.12:00:00") diff --git a/src/time.cr b/src/time.cr index d22a1270c86d..7fa6411e9e3a 100644 --- a/src/time.cr +++ b/src/time.cr @@ -224,6 +224,9 @@ struct Time # :nodoc: NANOSECONDS_PER_MILLISECOND = 1_000_000_i64 + # :nodoc: + NANOSECONDS_PER_MICROSECOND = 1_000_i64 + # :nodoc: NANOSECONDS_PER_SECOND = 1_000_000_000_i64 diff --git a/src/time/span.cr b/src/time/span.cr index 894af5eb33cb..3522bc6b35ac 100644 --- a/src/time/span.cr +++ b/src/time/span.cr @@ -182,6 +182,11 @@ struct Time::Span nanoseconds / NANOSECONDS_PER_MILLISECOND end + # Returns the number of microseconds of the second (`0..999999`) in this time span. + def microseconds : Int32 + nanoseconds / NANOSECONDS_PER_MICROSECOND + end + # Returns the number of nanoseconds of the second (`0..999_999_999`) # in this time span. def nanoseconds : Int32 @@ -449,6 +454,11 @@ struct Int Time::Span.new 0, 0, 0, 0, (self.to_i64 * Time::NANOSECONDS_PER_MILLISECOND) end + # Returns a `Time::Span` of `self` microseconds. + def microseconds : Time::Span + Time::Span.new 0, 0, 0, 0, (self.to_i64 * Time::NANOSECONDS_PER_MICROSECOND) + end + # :nodoc: def nanosecond : Time::Span nanoseconds @@ -495,6 +505,11 @@ struct Float (self / 1_000).seconds end + # Returns a `Time::Span` of `self` microseconds. + def microseconds : Time::Span + (self / 1_000_000).seconds + end + # Returns a `Time::Span` of `self` nanoseconds. def nanoseconds : Time::Span seconds = (self / Time::NANOSECONDS_PER_SECOND).to_i64