calcpace 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/calcpace/calculator.rb +3 -1
- data/lib/calcpace/converter.rb +44 -44
- data/test/calcpace/test_calculator.rb +68 -68
- data/test/calcpace/test_converter.rb +49 -49
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08aafc87c8fa3b75db3dfac8e186f803cbfec584991945e9849648a0d91c7341'
|
4
|
+
data.tar.gz: 886d0b4b83bc2bbc07b3f2dc5d4b3b605459cc15df13a51c22e4ba87f2620ff4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e3b69e165c445f5c2885c91a8b866020095ba3de87431817eed0d75df2f6f3e65da15cb73205904cff8c3844d590ce3b3edeabdf91cd74f31bbeafe84ac085c
|
7
|
+
data.tar.gz: 311f84fa56b4f5d3bec6e0c16cac2d6650a488828058f169c8bf1f12c410bff8a91c9be667ffd30ed6dcf40a856f5c64a63aa4b9386095f9a0fdbd7c83548844
|
data/lib/calcpace/calculator.rb
CHANGED
data/lib/calcpace/converter.rb
CHANGED
@@ -1,44 +1,44 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bigdecimal'
|
4
|
-
|
5
|
-
module Converter
|
6
|
-
KM_TO_MI = BigDecimal(
|
7
|
-
MI_TO_KM = BigDecimal(
|
8
|
-
|
9
|
-
def to_seconds(time)
|
10
|
-
check_time(time)
|
11
|
-
convert_to_seconds(time)
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_clocktime(seconds)
|
15
|
-
check_integer(seconds)
|
16
|
-
convert_to_clocktime(seconds)
|
17
|
-
end
|
18
|
-
|
19
|
-
def convert(distance, unit, round_limit = 2)
|
20
|
-
check_distance(distance)
|
21
|
-
check_unit(unit)
|
22
|
-
check_integer(round_limit)
|
23
|
-
convert_the_distance(BigDecimal(distance.to_s), unit, round_limit)
|
24
|
-
end
|
25
|
-
|
26
|
-
def convert_to_seconds(time)
|
27
|
-
hour, minute, seconds = time.split(':').map(&:to_i)
|
28
|
-
(hour * 3600) + (minute * 60) + seconds
|
29
|
-
end
|
30
|
-
|
31
|
-
def convert_to_clocktime(seconds)
|
32
|
-
format = seconds >= 86_400 ? '%d %H:%M:%S' : '%H:%M:%S'
|
33
|
-
Time.at(seconds.to_i).utc.strftime(format)
|
34
|
-
end
|
35
|
-
|
36
|
-
def convert_the_distance(distance, unit, round_limit = 2)
|
37
|
-
case unit
|
38
|
-
when 'km'
|
39
|
-
(distance * KM_TO_MI).round(round_limit)
|
40
|
-
when 'mi'
|
41
|
-
(distance * MI_TO_KM).round(round_limit)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bigdecimal'
|
4
|
+
|
5
|
+
module Converter
|
6
|
+
KM_TO_MI = BigDecimal('0.621371')
|
7
|
+
MI_TO_KM = BigDecimal('1.60934')
|
8
|
+
|
9
|
+
def to_seconds(time)
|
10
|
+
check_time(time)
|
11
|
+
convert_to_seconds(time)
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_clocktime(seconds)
|
15
|
+
check_integer(seconds)
|
16
|
+
convert_to_clocktime(seconds)
|
17
|
+
end
|
18
|
+
|
19
|
+
def convert(distance, unit, round_limit = 2)
|
20
|
+
check_distance(distance)
|
21
|
+
check_unit(unit)
|
22
|
+
check_integer(round_limit)
|
23
|
+
convert_the_distance(BigDecimal(distance.to_s), unit, round_limit)
|
24
|
+
end
|
25
|
+
|
26
|
+
def convert_to_seconds(time)
|
27
|
+
hour, minute, seconds = time.split(':').map(&:to_i)
|
28
|
+
(hour * 3600) + (minute * 60) + seconds
|
29
|
+
end
|
30
|
+
|
31
|
+
def convert_to_clocktime(seconds)
|
32
|
+
format = seconds >= 86_400 ? '%d %H:%M:%S' : '%H:%M:%S'
|
33
|
+
Time.at(seconds.to_i).utc.strftime(format)
|
34
|
+
end
|
35
|
+
|
36
|
+
def convert_the_distance(distance, unit, round_limit = 2)
|
37
|
+
case unit
|
38
|
+
when 'km'
|
39
|
+
(distance * KM_TO_MI).round(round_limit)
|
40
|
+
when 'mi'
|
41
|
+
(distance * MI_TO_KM).round(round_limit)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,68 +1,68 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require 'bigdecimal'
|
5
|
-
require_relative '../../lib/calcpace'
|
6
|
-
|
7
|
-
class TestCalculator < Minitest::Test
|
8
|
-
def setup
|
9
|
-
@checker = Calcpace.new
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_pace
|
13
|
-
assert_raises(RuntimeError) { @checker.pace('', 10) }
|
14
|
-
assert_raises(RuntimeError) { @checker.pace('invalid', 10) }
|
15
|
-
assert_raises(RuntimeError) { @checker.pace('00:00:00', 0) }
|
16
|
-
assert_raises(RuntimeError) { @checker.pace('00:00:00', -1) }
|
17
|
-
assert_equal '00:06:00', @checker.pace('01:00:00', 10)
|
18
|
-
assert_equal '00:07:54', @checker.pace('01:37:21', 12.3)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_pace_without_bigdecimal_precision
|
22
|
-
assert_equal '00:07:54', @checker.pace('01:37:21', 12.3, false)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_pace_seconds
|
26
|
-
assert_raises(RuntimeError) { @checker.pace_seconds('', 10) }
|
27
|
-
assert_raises(RuntimeError) { @checker.pace_seconds('invalid', 10) }
|
28
|
-
assert_raises(RuntimeError) { @checker.pace_seconds('00:00:00', 0) }
|
29
|
-
assert_raises(RuntimeError) { @checker.pace_seconds('00:00:00', -1) }
|
30
|
-
assert_equal BigDecimal('474.8780487804878'), @checker.pace_seconds('01:37:21', 12.3)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_pace_seconds_with_bigdecimal_precision
|
34
|
-
assert_equal BigDecimal('0.474878048780487804878048780487804878049e3'), @checker.pace_seconds('01:37:21', 12.3, true)
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_total_time
|
38
|
-
assert_raises(RuntimeError) { @checker.total_time('', 10) }
|
39
|
-
assert_raises(RuntimeError) { @checker.total_time('invalid', 10) }
|
40
|
-
assert_raises(RuntimeError) { @checker.total_time('00:00:00', 0) }
|
41
|
-
assert_raises(RuntimeError) { @checker.total_time('00:00:00', -1) }
|
42
|
-
assert_equal '01:00:00', @checker.total_time('00:05:00', 12)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_total_time_seconds
|
46
|
-
assert_raises(RuntimeError) { @checker.total_time_seconds('', 10) }
|
47
|
-
|
48
|
-
assert_raises(RuntimeError) { @checker.total_time_seconds('00:00:00', 0) }
|
49
|
-
assert_raises(RuntimeError) { @checker.total_time_seconds('00:00:00', -1) }
|
50
|
-
assert_equal 3600, @checker.total_time_seconds('00:05:00', 12)
|
51
|
-
assert_equal
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_total_time_seconds_with_bigdecimal_precision
|
55
|
-
assert_equal BigDecimal('0.718443e5'), @checker.total_time_seconds('01:37:21', 12.3, true)
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_distance
|
59
|
-
assert_raises(RuntimeError) { @checker.distance('', '00:05:00') }
|
60
|
-
assert_raises(RuntimeError) { @checker.distance('01:00:00', '') }
|
61
|
-
assert_equal 18.0, @checker.distance('01:30:00', '00:05:00')
|
62
|
-
assert_equal 15.0, @checker.distance('01:37:21', '00:06:17')
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_distance_with_bigdecimal_precision
|
66
|
-
assert_equal BigDecimal('0.15493368700265251989389920424403183024e2'), @checker.distance('01:37:21', '00:06:17', true)
|
67
|
-
end
|
68
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'bigdecimal'
|
5
|
+
require_relative '../../lib/calcpace'
|
6
|
+
|
7
|
+
class TestCalculator < Minitest::Test
|
8
|
+
def setup
|
9
|
+
@checker = Calcpace.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_pace
|
13
|
+
assert_raises(RuntimeError) { @checker.pace('', 10) }
|
14
|
+
assert_raises(RuntimeError) { @checker.pace('invalid', 10) }
|
15
|
+
assert_raises(RuntimeError) { @checker.pace('00:00:00', 0) }
|
16
|
+
assert_raises(RuntimeError) { @checker.pace('00:00:00', -1) }
|
17
|
+
assert_equal '00:06:00', @checker.pace('01:00:00', 10)
|
18
|
+
assert_equal '00:07:54', @checker.pace('01:37:21', 12.3)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_pace_without_bigdecimal_precision
|
22
|
+
assert_equal '00:07:54', @checker.pace('01:37:21', 12.3, false)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_pace_seconds
|
26
|
+
assert_raises(RuntimeError) { @checker.pace_seconds('', 10) }
|
27
|
+
assert_raises(RuntimeError) { @checker.pace_seconds('invalid', 10) }
|
28
|
+
assert_raises(RuntimeError) { @checker.pace_seconds('00:00:00', 0) }
|
29
|
+
assert_raises(RuntimeError) { @checker.pace_seconds('00:00:00', -1) }
|
30
|
+
assert_equal BigDecimal('474.8780487804878'), @checker.pace_seconds('01:37:21', 12.3)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_pace_seconds_with_bigdecimal_precision
|
34
|
+
assert_equal BigDecimal('0.474878048780487804878048780487804878049e3'), @checker.pace_seconds('01:37:21', 12.3, true)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_total_time
|
38
|
+
assert_raises(RuntimeError) { @checker.total_time('', 10) }
|
39
|
+
assert_raises(RuntimeError) { @checker.total_time('invalid', 10) }
|
40
|
+
assert_raises(RuntimeError) { @checker.total_time('00:00:00', 0) }
|
41
|
+
assert_raises(RuntimeError) { @checker.total_time('00:00:00', -1) }
|
42
|
+
assert_equal '01:00:00', @checker.total_time('00:05:00', 12)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_total_time_seconds
|
46
|
+
assert_raises(RuntimeError) { @checker.total_time_seconds('', 10) }
|
47
|
+
assert_raises(RuntimeError) { @checker.total_time_seconds('invalid', 10) }
|
48
|
+
assert_raises(RuntimeError) { @checker.total_time_seconds('00:00:00', 0) }
|
49
|
+
assert_raises(RuntimeError) { @checker.total_time_seconds('00:00:00', -1) }
|
50
|
+
assert_equal 3600, @checker.total_time_seconds('00:05:00', 12)
|
51
|
+
assert_equal 71_844.3, @checker.total_time_seconds('01:37:21', 12.3)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_total_time_seconds_with_bigdecimal_precision
|
55
|
+
assert_equal BigDecimal('0.718443e5'), @checker.total_time_seconds('01:37:21', 12.3, true)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_distance
|
59
|
+
assert_raises(RuntimeError) { @checker.distance('', '00:05:00') }
|
60
|
+
assert_raises(RuntimeError) { @checker.distance('01:00:00', '') }
|
61
|
+
assert_equal 18.0, @checker.distance('01:30:00', '00:05:00')
|
62
|
+
assert_equal 15.0, @checker.distance('01:37:21', '00:06:17')
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_distance_with_bigdecimal_precision
|
66
|
+
assert_equal BigDecimal('0.15493368700265251989389920424403183024e2'), @checker.distance('01:37:21', '00:06:17', true)
|
67
|
+
end
|
68
|
+
end
|
@@ -1,49 +1,49 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require_relative '../../lib/calcpace'
|
5
|
-
|
6
|
-
class TestConverter < Minitest::Test
|
7
|
-
def setup
|
8
|
-
@checker = Calcpace.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_convert_to_seconds
|
12
|
-
assert_equal 4262, @checker.convert_to_seconds('01:11:02')
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_to_seconds
|
16
|
-
assert_equal 3600, @checker.to_seconds('01:00:00')
|
17
|
-
assert_raises(RuntimeError) { @checker.to_seconds('invalid') }
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_convert_to_clocktime
|
21
|
-
assert_equal '01:11:02', @checker.convert_to_clocktime(4262)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_to_clocktime
|
25
|
-
assert_equal '01:00:00', @checker.to_clocktime(3600)
|
26
|
-
assert_equal '02 01:00:00', @checker.to_clocktime(
|
27
|
-
assert_raises(RuntimeError) { @checker.to_clocktime(-1) }
|
28
|
-
assert_raises(RuntimeError) { @checker.to_clocktime(0) }
|
29
|
-
assert_raises(RuntimeError) { @checker.to_clocktime('invalid') }
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_convert_the_distance
|
33
|
-
assert_equal 6.21, @checker.convert_the_distance(10, 'km')
|
34
|
-
assert_equal 6.2, @checker.convert_the_distance(10, 'km', 1)
|
35
|
-
assert_equal 6.214, @checker.convert_the_distance(10, 'km', 3)
|
36
|
-
assert_equal 16.09, @checker.convert_the_distance(10, 'mi')
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_convert
|
40
|
-
assert_equal 6.21, @checker.convert(10, 'km')
|
41
|
-
assert_equal 16.09, @checker.convert(10, 'mi')
|
42
|
-
assert_equal 6.2, @checker.convert(10, 'km', 1)
|
43
|
-
assert_raises(RuntimeError) { @checker.convert(10, 'invalid') }
|
44
|
-
assert_raises(RuntimeError) { @checker.convert(-1, 'km') }
|
45
|
-
assert_raises(RuntimeError) { @checker.convert(10, 'km', -2) }
|
46
|
-
assert_raises(RuntimeError) { @checker.convert(10, 'km', 0) }
|
47
|
-
assert_raises(RuntimeError) { @checker.convert(10, 'km', 'invalid') }
|
48
|
-
end
|
49
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require_relative '../../lib/calcpace'
|
5
|
+
|
6
|
+
class TestConverter < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@checker = Calcpace.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_convert_to_seconds
|
12
|
+
assert_equal 4262, @checker.convert_to_seconds('01:11:02')
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_to_seconds
|
16
|
+
assert_equal 3600, @checker.to_seconds('01:00:00')
|
17
|
+
assert_raises(RuntimeError) { @checker.to_seconds('invalid') }
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_convert_to_clocktime
|
21
|
+
assert_equal '01:11:02', @checker.convert_to_clocktime(4262)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_to_clocktime
|
25
|
+
assert_equal '01:00:00', @checker.to_clocktime(3600)
|
26
|
+
assert_equal '02 01:00:00', @checker.to_clocktime(90_000)
|
27
|
+
assert_raises(RuntimeError) { @checker.to_clocktime(-1) }
|
28
|
+
assert_raises(RuntimeError) { @checker.to_clocktime(0) }
|
29
|
+
assert_raises(RuntimeError) { @checker.to_clocktime('invalid') }
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_convert_the_distance
|
33
|
+
assert_equal 6.21, @checker.convert_the_distance(10, 'km')
|
34
|
+
assert_equal 6.2, @checker.convert_the_distance(10, 'km', 1)
|
35
|
+
assert_equal 6.214, @checker.convert_the_distance(10, 'km', 3)
|
36
|
+
assert_equal 16.09, @checker.convert_the_distance(10, 'mi')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_convert
|
40
|
+
assert_equal 6.21, @checker.convert(10, 'km')
|
41
|
+
assert_equal 16.09, @checker.convert(10, 'mi')
|
42
|
+
assert_equal 6.2, @checker.convert(10, 'km', 1)
|
43
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'invalid') }
|
44
|
+
assert_raises(RuntimeError) { @checker.convert(-1, 'km') }
|
45
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'km', -2) }
|
46
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'km', 0) }
|
47
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'km', 'invalid') }
|
48
|
+
end
|
49
|
+
end
|