calcpace 1.2.0 → 1.4.0
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 +71 -42
- data/lib/calcpace/checker.rb +12 -19
- data/lib/calcpace/converter.rb +58 -55
- data/lib/calcpace.rb +16 -17
- data/test/calcpace/test_calculator.rb +118 -73
- data/test/calcpace/test_checker.rb +21 -27
- data/test/calcpace/test_converter.rb +67 -58
- metadata +12 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f044557de907efbc86496d835e45575a5302a965de92cfcb38f52eb64f0e861
|
4
|
+
data.tar.gz: 6c676c4d91b34b38593a1f696697d70c8da4025cb3fe34492f98bdd554f54c3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d1878a80782cec3056945bd66aae3b185dd6889fd0de6d330fbf0de990f35f2779196b7032d2dd53364df2fcfef8ee4313132d045a9521fbc72e2134ba9d15d
|
7
|
+
data.tar.gz: c578de2a7229f1b2be9fd01e5b0f825b8a03ae6b54b0ca9bacf78923916a28ebd779a50e77811710f4845456a573d65dc30c943ed372597506b915219701bb8d
|
data/lib/calcpace/calculator.rb
CHANGED
@@ -1,42 +1,71 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bigdecimal'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def
|
31
|
-
check_time(time)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bigdecimal'
|
4
|
+
|
5
|
+
# Module to calculate time, distance, pace and velocity
|
6
|
+
module Calculator
|
7
|
+
def velocity(time, distance)
|
8
|
+
check_positive(distance)
|
9
|
+
check_positive(time)
|
10
|
+
distance.to_f / time
|
11
|
+
end
|
12
|
+
|
13
|
+
def checked_velocity(time, distance)
|
14
|
+
check_time(time)
|
15
|
+
seconds = convert_to_seconds(time)
|
16
|
+
velocity(seconds, distance)
|
17
|
+
end
|
18
|
+
|
19
|
+
def clock_velocity(time, distance)
|
20
|
+
velocity_in_seconds = checked_velocity(time, distance)
|
21
|
+
convert_to_clocktime(velocity_in_seconds)
|
22
|
+
end
|
23
|
+
|
24
|
+
def pace(time, distance)
|
25
|
+
check_positive(distance)
|
26
|
+
check_positive(time)
|
27
|
+
time.to_f / distance
|
28
|
+
end
|
29
|
+
|
30
|
+
def checked_pace(time, distance)
|
31
|
+
check_time(time)
|
32
|
+
seconds = convert_to_seconds(time)
|
33
|
+
pace(seconds, distance)
|
34
|
+
end
|
35
|
+
|
36
|
+
def clock_pace(time, distance)
|
37
|
+
velocity_in_seconds = checked_pace(time, distance)
|
38
|
+
convert_to_clocktime(velocity_in_seconds)
|
39
|
+
end
|
40
|
+
|
41
|
+
def time(velocity, distance)
|
42
|
+
check_positive(distance)
|
43
|
+
check_positive(velocity)
|
44
|
+
velocity * distance
|
45
|
+
end
|
46
|
+
|
47
|
+
def checked_time(velocity, distance)
|
48
|
+
check_time(velocity)
|
49
|
+
velocity_seconds = convert_to_seconds(velocity)
|
50
|
+
time(velocity_seconds, distance)
|
51
|
+
end
|
52
|
+
|
53
|
+
def clock_time(velocity, distance)
|
54
|
+
total_time_in_seconds = checked_time(velocity, distance)
|
55
|
+
convert_to_clocktime(total_time_in_seconds)
|
56
|
+
end
|
57
|
+
|
58
|
+
def distance(time, velocity)
|
59
|
+
check_positive(time)
|
60
|
+
check_positive(velocity)
|
61
|
+
time.to_f / velocity
|
62
|
+
end
|
63
|
+
|
64
|
+
def checked_distance(time, velocity)
|
65
|
+
check_time(time)
|
66
|
+
check_time(velocity)
|
67
|
+
time_seconds = convert_to_seconds(time)
|
68
|
+
velocity_seconds = convert_to_seconds(velocity)
|
69
|
+
distance(time_seconds, velocity_seconds)
|
70
|
+
end
|
71
|
+
end
|
data/lib/calcpace/checker.rb
CHANGED
@@ -1,19 +1,12 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
raise 'It must be a positive number' unless second.is_a?(Integer) && second.positive?
|
14
|
-
end
|
15
|
-
|
16
|
-
def check_unit(unit)
|
17
|
-
raise 'It must be km or mi' unless %w[km mi].include?(unit)
|
18
|
-
end
|
19
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Module to check if the input is valid or of the correct type
|
4
|
+
module Checker
|
5
|
+
def check_positive(number)
|
6
|
+
raise 'It must be a X.X positive number' unless number.positive?
|
7
|
+
end
|
8
|
+
|
9
|
+
def check_time(time_string)
|
10
|
+
raise 'It must be a XX:XX:XX time' unless time_string =~ /\d{0,2}(:)*?\d{1,2}(:)\d{1,2}/
|
11
|
+
end
|
12
|
+
end
|
data/lib/calcpace/converter.rb
CHANGED
@@ -1,55 +1,58 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bigdecimal'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
KM_TO_MI = 0.621371
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bigdecimal'
|
4
|
+
|
5
|
+
# Module to convert units
|
6
|
+
module Converter
|
7
|
+
KM_TO_MI = 0.621371
|
8
|
+
MI_TO_KM = 1.60934
|
9
|
+
NAUTICAL_MI_TO_KM = 1.852
|
10
|
+
KM_TO_NAUTICAL_MI = 0.539957
|
11
|
+
METERS_TO_KM = 0.001
|
12
|
+
KM_TO_METERS = 1000
|
13
|
+
METERS_TO_MI = 0.000621371
|
14
|
+
MI_TO_METERS = 1609.34
|
15
|
+
METERS_TO_FEET = 3.28084
|
16
|
+
FEET_TO_METERS = 0.3048
|
17
|
+
METERS_TO_YARDS = 1.09361
|
18
|
+
YARDS_TO_METERS = 0.9144
|
19
|
+
METERS_TO_INCHES = 39.3701
|
20
|
+
INCHES_TO_METERS = 0.0254
|
21
|
+
|
22
|
+
M_S_TO_KM_H = 3.6
|
23
|
+
KM_H_TO_M_S = 0.277778
|
24
|
+
M_S_TO_MI_H = 2.23694
|
25
|
+
MI_H_TO_M_S = 0.44704
|
26
|
+
M_S_TO_NAUTICAL_MI_H = 1.94384
|
27
|
+
NAUTICAL_MI_H_TO_M_S = 0.514444
|
28
|
+
M_S_TO_FEET_S = 3.28084
|
29
|
+
FEET_S_TO_M_S = 0.3048
|
30
|
+
M_S_TO_KNOTS = 1.94384
|
31
|
+
KNOTS_TO_M_S = 0.514444
|
32
|
+
KM_H_TO_MI_H = 0.621371
|
33
|
+
MI_H_TO_KM_H = 1.60934
|
34
|
+
|
35
|
+
def convert(value, unit)
|
36
|
+
check_positive(value)
|
37
|
+
unit_constant = constant(unit)
|
38
|
+
value * unit_constant
|
39
|
+
end
|
40
|
+
|
41
|
+
def convert_to_seconds(time)
|
42
|
+
hour, minute, seconds = time.split(':').map(&:to_i)
|
43
|
+
(hour * 3600) + (minute * 60) + seconds
|
44
|
+
end
|
45
|
+
|
46
|
+
def convert_to_clocktime(seconds)
|
47
|
+
format = seconds >= 86_400 ? '%d %H:%M:%S' : '%H:%M:%S'
|
48
|
+
Time.at(seconds.to_i).utc.strftime(format)
|
49
|
+
end
|
50
|
+
|
51
|
+
def constant(symbol)
|
52
|
+
Converter.const_get(symbol.to_s.upcase)
|
53
|
+
end
|
54
|
+
|
55
|
+
def list_constants
|
56
|
+
Converter.constants.map { |c| c.downcase.to_sym }
|
57
|
+
end
|
58
|
+
end
|
data/lib/calcpace.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'calcpace/calculator'
|
4
|
-
require_relative 'calcpace/checker'
|
5
|
-
require_relative 'calcpace/converter'
|
6
|
-
|
7
|
-
class
|
8
|
-
|
9
|
-
include
|
10
|
-
include
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'calcpace/calculator'
|
4
|
+
require_relative 'calcpace/checker'
|
5
|
+
require_relative 'calcpace/converter'
|
6
|
+
|
7
|
+
# Main class to calculate velocity, pace, time, distance and velocity
|
8
|
+
class Calcpace
|
9
|
+
include Calculator
|
10
|
+
include Checker
|
11
|
+
include Converter
|
12
|
+
|
13
|
+
attr_reader :bigdecimal
|
14
|
+
|
15
|
+
def initialize; end
|
16
|
+
end
|
@@ -1,73 +1,118 @@
|
|
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
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
assert_raises(RuntimeError) { @checker.
|
17
|
-
assert_raises(RuntimeError) { @checker.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
assert_equal
|
28
|
-
end
|
29
|
-
|
30
|
-
def
|
31
|
-
assert_raises(RuntimeError) { @checker.
|
32
|
-
assert_raises(RuntimeError) { @checker.
|
33
|
-
assert_raises(RuntimeError) { @checker.
|
34
|
-
assert_raises(RuntimeError) { @checker.
|
35
|
-
assert_equal
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
assert_raises(RuntimeError) { @checker.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
assert_equal
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
assert_equal
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
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_velocity
|
13
|
+
assert_equal 3.333, @checker.velocity(3600, 12_000).round(3)
|
14
|
+
assert_equal 12.3, @checker.velocity(5841, 71_844.3)
|
15
|
+
assert_equal 3.6, @checker.velocity(10_000, 36_000.0)
|
16
|
+
assert_raises(RuntimeError) { @checker.velocity(0, 10) }
|
17
|
+
assert_raises(RuntimeError) { @checker.velocity(10, -1) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_checked_velocity
|
21
|
+
assert_raises(RuntimeError) { @checker.checked_velocity('', 10) }
|
22
|
+
assert_raises(RuntimeError) { @checker.checked_velocity('invalid', 10) }
|
23
|
+
assert_raises(RuntimeError) { @checker.checked_velocity('00:00:00', 0) }
|
24
|
+
assert_raises(RuntimeError) { @checker.checked_velocity('00:00:00', -1) }
|
25
|
+
assert_equal 2.778, @checker.checked_velocity('01:00:00', 10_000).round(3)
|
26
|
+
assert_equal 10, @checker.checked_velocity('00:00:01', 10)
|
27
|
+
assert_equal 12.3, @checker.checked_velocity('01:37:21', 71_844.3)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_clock_velocity
|
31
|
+
assert_raises(RuntimeError) { @checker.clock_velocity('', 10) }
|
32
|
+
assert_raises(RuntimeError) { @checker.clock_velocity('invalid', 10) }
|
33
|
+
assert_raises(RuntimeError) { @checker.clock_velocity('00:00:00', 0) }
|
34
|
+
assert_raises(RuntimeError) { @checker.clock_velocity('00:00:00', -1) }
|
35
|
+
assert_equal '00:00:02', @checker.clock_velocity('01:00:00', 10_000)
|
36
|
+
assert_equal '00:00:12', @checker.clock_velocity('01:37:21', 71_844.3)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_pace
|
40
|
+
assert_equal 300, @checker.pace(3600, 12)
|
41
|
+
assert_equal 122.81076923076924, @checker.pace(71_844.3, 585.0)
|
42
|
+
assert_raises(RuntimeError) { @checker.pace(0, 10) }
|
43
|
+
assert_raises(RuntimeError) { @checker.pace(10, -1) }
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_checked_pace
|
47
|
+
assert_raises(RuntimeError) { @checker.checked_pace('', 10) }
|
48
|
+
assert_raises(RuntimeError) { @checker.checked_pace('invalid', 10) }
|
49
|
+
assert_raises(RuntimeError) { @checker.checked_pace('00:00:00', 0) }
|
50
|
+
assert_raises(RuntimeError) { @checker.checked_pace('00:00:00', -1) }
|
51
|
+
assert_equal 360, @checker.checked_pace('01:00:00', 10)
|
52
|
+
assert_equal 474.8780487804878, @checker.checked_pace('01:37:21', 12.3)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_clock_pace
|
56
|
+
assert_raises(RuntimeError) { @checker.clock_pace('', 10) }
|
57
|
+
assert_raises(RuntimeError) { @checker.clock_pace('invalid', 10) }
|
58
|
+
assert_raises(RuntimeError) { @checker.clock_pace('00:00:00', 0) }
|
59
|
+
assert_raises(RuntimeError) { @checker.clock_pace('00:00:00', -1) }
|
60
|
+
assert_equal '00:06:00', @checker.clock_pace('01:00:00', 10)
|
61
|
+
assert_equal '00:07:54', @checker.clock_pace('01:37:21', 12.3)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_time
|
65
|
+
assert_equal 43_200, @checker.time(3600, 12)
|
66
|
+
assert_equal 5841.0, @checker.time(12.3, 474.8780487804878)
|
67
|
+
assert_raises(RuntimeError) { @checker.time(0, 10) }
|
68
|
+
assert_raises(RuntimeError) { @checker.time(10, -1) }
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_checked_time
|
72
|
+
assert_raises(RuntimeError) { @checker.checked_time('', 10) }
|
73
|
+
assert_raises(RuntimeError) { @checker.checked_time('invalid', 10) }
|
74
|
+
assert_raises(RuntimeError) { @checker.checked_time('00:00:00', 0) }
|
75
|
+
assert_raises(RuntimeError) { @checker.checked_time('00:00:00', -1) }
|
76
|
+
assert_equal 3600, @checker.checked_time('00:05:00', 12)
|
77
|
+
assert_equal 71_844.3, @checker.checked_time('01:37:21', 12.3)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_clock_time
|
81
|
+
assert_raises(RuntimeError) { @checker.clock_time('', 10) }
|
82
|
+
assert_raises(RuntimeError) { @checker.clock_time('invalid', 10) }
|
83
|
+
assert_raises(RuntimeError) { @checker.clock_time('00:00:00', 0) }
|
84
|
+
assert_raises(RuntimeError) { @checker.clock_time('00:00:00', -1) }
|
85
|
+
assert_equal '01:00:00', @checker.clock_time('00:05:00', 12)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_distance
|
89
|
+
assert_equal 30, @checker.distance(3600, 120)
|
90
|
+
assert_equal 12.3, @checker.distance(5841.0, 474.8780487804878)
|
91
|
+
assert_raises(RuntimeError) { @checker.distance(0, 10) }
|
92
|
+
assert_raises(RuntimeError) { @checker.distance(10, -1) }
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_checked_distance
|
96
|
+
assert_raises(RuntimeError) { @checker.checked_distance('', '00:05:00') }
|
97
|
+
assert_raises(RuntimeError) { @checker.checked_distance('01:00:00', '') }
|
98
|
+
assert_equal 18.0, @checker.checked_distance('01:30:00', '00:05:00')
|
99
|
+
assert_equal 15.493, @checker.checked_distance('01:37:21', '00:06:17').round(3)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_readme_examples_one
|
103
|
+
assert_equal 3.386206896551724, @checker.velocity(3625, 12_275)
|
104
|
+
assert_equal 305.4166666666667, @checker.pace(3665, 12)
|
105
|
+
assert_equal 2520.0, @checker.time(210, 12)
|
106
|
+
assert_equal 80.5, @checker.distance(9660, 120)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_readme_examples_two
|
110
|
+
assert_equal 2.8658333333333332, @checker.checked_velocity('01:00:00', 10_317)
|
111
|
+
assert_equal '00:00:02', @checker.clock_velocity('01:00:00', 10_317)
|
112
|
+
assert_equal 489.2, @checker.checked_pace('01:21:32', 10)
|
113
|
+
assert_equal '00:08:09', @checker.clock_pace('01:21:32', 10)
|
114
|
+
assert_equal 4170.599999999999, @checker.checked_time('00:05:31', 12.6)
|
115
|
+
assert_equal '01:09:30', @checker.clock_time('00:05:31', 12.6)
|
116
|
+
assert_equal 12.640826873385013, @checker.checked_distance('01:21:32', '00:06:27')
|
117
|
+
end
|
118
|
+
end
|
@@ -1,27 +1,21 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require_relative '../../lib/calcpace'
|
5
|
-
|
6
|
-
class TestChecker < Minitest::Test
|
7
|
-
def setup
|
8
|
-
@checker = Calcpace.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def
|
12
|
-
assert_raises(RuntimeError) { @checker.
|
13
|
-
assert_raises(RuntimeError) { @checker.
|
14
|
-
assert_nil @checker.
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_check_time
|
18
|
-
assert_raises(RuntimeError) { @checker.check_time('') }
|
19
|
-
assert_nil @checker.check_time('00:00:00')
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_check_integer
|
23
|
-
assert_raises(RuntimeError) { @checker.check_integer(-1) }
|
24
|
-
assert_raises(RuntimeError) { @checker.check_integer(0) }
|
25
|
-
assert_nil @checker.check_integer(1)
|
26
|
-
end
|
27
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require_relative '../../lib/calcpace'
|
5
|
+
|
6
|
+
class TestChecker < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@checker = Calcpace.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_check_positive
|
12
|
+
assert_raises(RuntimeError) { @checker.check_positive(-1) }
|
13
|
+
assert_raises(RuntimeError) { @checker.check_positive(0) }
|
14
|
+
assert_nil @checker.check_positive(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_check_time
|
18
|
+
assert_raises(RuntimeError) { @checker.check_time('') }
|
19
|
+
assert_nil @checker.check_time('00:00:00')
|
20
|
+
end
|
21
|
+
end
|
@@ -1,58 +1,67 @@
|
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
assert_equal
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
assert_equal
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
assert_equal
|
46
|
-
assert_equal
|
47
|
-
assert_equal
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
assert_equal
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
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_convert_to_clocktime
|
16
|
+
assert_equal '01:11:02', @checker.convert_to_clocktime(4262)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_convert_distance_one
|
20
|
+
assert_equal 0.621371, @checker.convert(1, :km_to_mi)
|
21
|
+
assert_equal 1.60934, @checker.convert(1, :mi_to_km)
|
22
|
+
assert_equal 1.852, @checker.convert(1, :nautical_mi_to_km)
|
23
|
+
assert_equal 0.539957, @checker.convert(1, :km_to_nautical_mi)
|
24
|
+
assert_equal 0.001, @checker.convert(1, :meters_to_km)
|
25
|
+
assert_equal 1000, @checker.convert(1, :km_to_meters)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_convert_distance_two
|
29
|
+
assert_equal 0.000621371, @checker.convert(1, :meters_to_mi)
|
30
|
+
assert_equal 1609.34, @checker.convert(1, :mi_to_meters)
|
31
|
+
assert_equal 3.28084, @checker.convert(1, :meters_to_feet)
|
32
|
+
assert_equal 0.3048, @checker.convert(1, :feet_to_meters)
|
33
|
+
assert_equal 1.09361, @checker.convert(1, :meters_to_yards)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_convert_distance_three
|
37
|
+
assert_equal 0.9144, @checker.convert(1, :yards_to_meters)
|
38
|
+
assert_equal 39.3701, @checker.convert(1, :meters_to_inches)
|
39
|
+
assert_equal 0.0254, @checker.convert(1, :inches_to_meters)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_convert_velocity_one
|
43
|
+
assert_equal 3.60, @checker.convert(1, :m_s_to_km_h)
|
44
|
+
assert_equal 0.277778, @checker.convert(1, :km_h_to_m_s)
|
45
|
+
assert_equal 2.23694, @checker.convert(1, :m_s_to_mi_h)
|
46
|
+
assert_equal 0.44704, @checker.convert(1, :mi_h_to_m_s)
|
47
|
+
assert_equal 1.94384, @checker.convert(1, :m_s_to_nautical_mi_h)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_convert_velocity_two
|
51
|
+
assert_equal 0.514444, @checker.convert(1, :nautical_mi_h_to_m_s)
|
52
|
+
assert_equal 0.621371, @checker.convert(1, :km_h_to_mi_h)
|
53
|
+
assert_equal 1.60934, @checker.convert(1, :mi_h_to_km_h)
|
54
|
+
assert_equal 1.94384, @checker.convert(1, :m_s_to_knots)
|
55
|
+
assert_equal 0.514444, @checker.convert(1, :knots_to_m_s)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_constant
|
59
|
+
assert_equal 0.621371, @checker.constant(:km_to_mi)
|
60
|
+
assert_equal 1.60934, @checker.constant(:mi_to_km)
|
61
|
+
assert_equal 1.852, @checker.constant(:nautical_mi_to_km)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_list_constants
|
65
|
+
assert_equal 26, @checker.list_constants.size
|
66
|
+
end
|
67
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calcpace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joao Gilberto Saraiva
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -72,34 +72,17 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '1.66'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0.11'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0.11'
|
97
|
-
description: Calcpace is a Ruby gem that helps with calculations related to running/cycling
|
98
|
-
activities or general purposes involving distance and time. It can calculate pace,
|
99
|
-
total time, and distance. It also converts distances between miles and kilometers
|
100
|
-
and check formats of time and distance. The results are provided in a readable format,
|
101
|
-
with times in HH:MM:SS or seconds and distances in X.X format. If you need, the
|
102
|
-
gem supports BigDecimal to handle the calculations with more precision.
|
82
|
+
version: '1.66'
|
83
|
+
description: Calcpace is designed for calculations and conversions related to distance
|
84
|
+
and time. It can calculate velocity, pace, total time, and distance and it supports
|
85
|
+
conversion to 26 different units, including kilometers, miles, meters, and feet.
|
103
86
|
email: joaogilberto@tuta.io
|
104
87
|
executables: []
|
105
88
|
extensions: []
|
@@ -132,11 +115,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
115
|
- !ruby/object:Gem::Version
|
133
116
|
version: '0'
|
134
117
|
requirements: []
|
135
|
-
rubygems_version: 3.
|
136
|
-
signing_key:
|
118
|
+
rubygems_version: 3.4.6
|
119
|
+
signing_key:
|
137
120
|
specification_version: 4
|
138
|
-
summary: 'Calcpace: calculate
|
139
|
-
|
121
|
+
summary: 'Calcpace: calculate total, distance, velocity and convert distances in an
|
122
|
+
easy way.'
|
140
123
|
test_files:
|
141
124
|
- test/calcpace/test_calculator.rb
|
142
125
|
- test/calcpace/test_checker.rb
|