calcpace 1.4.0 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f044557de907efbc86496d835e45575a5302a965de92cfcb38f52eb64f0e861
4
- data.tar.gz: 6c676c4d91b34b38593a1f696697d70c8da4025cb3fe34492f98bdd554f54c3c
3
+ metadata.gz: 68fc31f44ee7ddb620bc3648c7e58b6d96513433a0e76f5d29ee69fb00eb43a7
4
+ data.tar.gz: e6a583a06e8ff84ab5e519efc62a234248cc098713ade0656b3331070754f11b
5
5
  SHA512:
6
- metadata.gz: 8d1878a80782cec3056945bd66aae3b185dd6889fd0de6d330fbf0de990f35f2779196b7032d2dd53364df2fcfef8ee4313132d045a9521fbc72e2134ba9d15d
7
- data.tar.gz: c578de2a7229f1b2be9fd01e5b0f825b8a03ae6b54b0ca9bacf78923916a28ebd779a50e77811710f4845456a573d65dc30c943ed372597506b915219701bb8d
6
+ metadata.gz: 7f1fab83a5c2a44992a0273451a3fa7815f47d6d0022377b5ccdec095f3f8c00c90f7a20f91630eefdd9b3f086811f69a0e3dd67c822967f24db7507f707855d
7
+ data.tar.gz: 2e598a0d206c7f0d68b5c1eedcd8ce419b2ea8dc0c2bcb348d845ce2146c582121e9931bd0eb2d196985cfd0cfa57cf7e91241eb28d17074efb57a59e9ea4f85
@@ -1,71 +1,68 @@
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
1
+ # frozen_string_literal: true
2
+
3
+ # Module to calculate time, distance, pace and velocity
4
+ module Calculator
5
+ def velocity(time, distance)
6
+ validate_positive(time, distance)
7
+ distance.to_f / time
8
+ end
9
+
10
+ def checked_velocity(time, distance)
11
+ seconds = convert_to_seconds(validate_time(time))
12
+ velocity(seconds, distance)
13
+ end
14
+
15
+ def clock_velocity(time, distance)
16
+ convert_to_clocktime(checked_velocity(time, distance))
17
+ end
18
+
19
+ def pace(time, distance)
20
+ validate_positive(time, distance)
21
+ time.to_f / distance
22
+ end
23
+
24
+ def checked_pace(time, distance)
25
+ seconds = convert_to_seconds(validate_time(time))
26
+ pace(seconds, distance)
27
+ end
28
+
29
+ def clock_pace(time, distance)
30
+ convert_to_clocktime(checked_pace(time, distance))
31
+ end
32
+
33
+ def time(velocity, distance)
34
+ validate_positive(velocity, distance)
35
+ velocity * distance
36
+ end
37
+
38
+ def checked_time(velocity, distance)
39
+ velocity_seconds = convert_to_seconds(validate_time(velocity))
40
+ time(velocity_seconds, distance)
41
+ end
42
+
43
+ def clock_time(velocity, distance)
44
+ convert_to_clocktime(checked_time(velocity, distance))
45
+ end
46
+
47
+ def distance(time, velocity)
48
+ validate_positive(time, velocity)
49
+ time.to_f / velocity
50
+ end
51
+
52
+ def checked_distance(time, velocity)
53
+ time_seconds = convert_to_seconds(validate_time(time))
54
+ velocity_seconds = convert_to_seconds(validate_time(velocity))
55
+ distance(time_seconds, velocity_seconds)
56
+ end
57
+
58
+ private
59
+
60
+ def validate_positive(*values)
61
+ values.each { |value| check_positive(value) }
62
+ end
63
+
64
+ def validate_time(time)
65
+ check_time(time)
66
+ time
67
+ end
68
+ end
@@ -1,12 +1,12 @@
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
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 ArgumentError, 'It must be a positive number' unless number.is_a?(Numeric) && number.positive?
7
+ end
8
+
9
+ def check_time(time_string)
10
+ raise ArgumentError, 'It must be a valid time in the format XX:XX:XX' unless time_string =~ /^\d{1,2}:\d{2}:\d{2}$/
11
+ end
12
+ end
@@ -1,58 +1,86 @@
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
1
+ # frozen_string_literal: true
2
+
3
+ # Module to convert units
4
+ module Converter
5
+ module Distance
6
+ KM_TO_MI = 0.621371
7
+ MI_TO_KM = 1.60934
8
+ NAUTICAL_MI_TO_KM = 1.852
9
+ KM_TO_NAUTICAL_MI = 0.539957
10
+ METERS_TO_KM = 0.001
11
+ KM_TO_METERS = 1000
12
+ METERS_TO_MI = 0.000621371
13
+ MI_TO_METERS = 1609.34
14
+ METERS_TO_FEET = 3.28084
15
+ FEET_TO_METERS = 0.3048
16
+ METERS_TO_YARDS = 1.09361
17
+ YARDS_TO_METERS = 0.9144
18
+ METERS_TO_INCHES = 39.3701
19
+ INCHES_TO_METERS = 0.0254
20
+ KM_TO_YARDS = 1093.61
21
+ YARDS_TO_KM = 0.0009144
22
+ KM_TO_FEET = 3280.84
23
+ FEET_TO_KM = 0.0003048
24
+ KM_TO_INCHES = 39_370.1
25
+ INCHES_TO_KM = 0.0000254
26
+ MI_TO_YARDS = 1760
27
+ YARDS_TO_MI = 0.000568182
28
+ MI_TO_FEET = 5280
29
+ FEET_TO_MI = 0.000189394
30
+ MI_TO_INCHES = 63_360
31
+ INCHES_TO_MI = 0.0000157828
32
+ end
33
+
34
+ module Speed
35
+ M_S_TO_KM_H = 3.6
36
+ KM_H_TO_M_S = 0.277778
37
+ M_S_TO_MI_H = 2.23694
38
+ MI_H_TO_M_S = 0.44704
39
+ M_S_TO_NAUTICAL_MI_H = 1.94384
40
+ NAUTICAL_MI_H_TO_M_S = 0.514444
41
+ M_S_TO_FEET_S = 3.28084
42
+ FEET_S_TO_M_S = 0.3048
43
+ M_S_TO_KNOTS = 1.94384
44
+ KNOTS_TO_M_S = 0.514444
45
+ KM_H_TO_MI_H = 0.621371
46
+ MI_H_TO_KM_H = 1.60934
47
+ KM_H_TO_NAUTICAL_MI_H = 0.539957
48
+ NAUTICAL_MI_H_TO_KM_H = 1.852
49
+ MI_H_TO_NAUTICAL_MI_H = 0.868976
50
+ NAUTICAL_MI_H_TO_MI_H = 1.15078
51
+ end
52
+
53
+ def convert(value, unit)
54
+ check_positive(value)
55
+ unit_constant = constant(unit)
56
+ value * unit_constant
57
+ end
58
+
59
+ def convert_to_seconds(time)
60
+ hour, minute, seconds = time.split(':').map(&:to_i)
61
+ (hour * 3600) + (minute * 60) + seconds
62
+ end
63
+
64
+ def convert_to_clocktime(seconds)
65
+ format = seconds >= 86_400 ? '%d %H:%M:%S' : '%H:%M:%S'
66
+ Time.at(seconds.to_i).utc.strftime(format)
67
+ end
68
+
69
+ def constant(symbol)
70
+ Distance.const_get(symbol.to_s.upcase)
71
+ rescue NameError
72
+ Speed.const_get(symbol.to_s.upcase)
73
+ end
74
+
75
+ def list_all
76
+ (Distance.constants + Speed.constants).map { |c| c.downcase.to_sym }
77
+ end
78
+
79
+ def list_speed
80
+ Speed.constants.map { |c| c.downcase.to_sym }
81
+ end
82
+
83
+ def list_distance
84
+ Distance.constants.map { |c| c.downcase.to_sym }
85
+ end
86
+ end
data/lib/calcpace.rb CHANGED
@@ -1,16 +1,14 @@
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
+ # 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
+ def initialize; end
14
+ end
@@ -1,118 +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
- 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
+ # 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(ArgumentError) { @checker.velocity(0, 10) }
17
+ assert_raises(ArgumentError) { @checker.velocity(10, -1) }
18
+ end
19
+
20
+ def test_checked_velocity
21
+ assert_raises(ArgumentError) { @checker.checked_velocity('', 10) }
22
+ assert_raises(ArgumentError) { @checker.checked_velocity('invalid', 10) }
23
+ assert_raises(ArgumentError) { @checker.checked_velocity('00:00:00', 0) }
24
+ assert_raises(ArgumentError) { @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(ArgumentError) { @checker.clock_velocity('', 10) }
32
+ assert_raises(ArgumentError) { @checker.clock_velocity('invalid', 10) }
33
+ assert_raises(ArgumentError) { @checker.clock_velocity('00:00:00', 0) }
34
+ assert_raises(ArgumentError) { @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(ArgumentError) { @checker.pace(0, 10) }
43
+ assert_raises(ArgumentError) { @checker.pace(10, -1) }
44
+ end
45
+
46
+ def test_checked_pace
47
+ assert_raises(ArgumentError) { @checker.checked_pace('', 10) }
48
+ assert_raises(ArgumentError) { @checker.checked_pace('invalid', 10) }
49
+ assert_raises(ArgumentError) { @checker.checked_pace('00:00:00', 0) }
50
+ assert_raises(ArgumentError) { @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(ArgumentError) { @checker.clock_pace('', 10) }
57
+ assert_raises(ArgumentError) { @checker.clock_pace('invalid', 10) }
58
+ assert_raises(ArgumentError) { @checker.clock_pace('00:00:00', 0) }
59
+ assert_raises(ArgumentError) { @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(ArgumentError) { @checker.time(0, 10) }
68
+ assert_raises(ArgumentError) { @checker.time(10, -1) }
69
+ end
70
+
71
+ def test_checked_time
72
+ assert_raises(ArgumentError) { @checker.checked_time('', 10) }
73
+ assert_raises(ArgumentError) { @checker.checked_time('invalid', 10) }
74
+ assert_raises(ArgumentError) { @checker.checked_time('00:00:00', 0) }
75
+ assert_raises(ArgumentError) { @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(ArgumentError) { @checker.clock_time('', 10) }
82
+ assert_raises(ArgumentError) { @checker.clock_time('invalid', 10) }
83
+ assert_raises(ArgumentError) { @checker.clock_time('00:00:00', 0) }
84
+ assert_raises(ArgumentError) { @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(ArgumentError) { @checker.distance(0, 10) }
92
+ assert_raises(ArgumentError) { @checker.distance(10, -1) }
93
+ end
94
+
95
+ def test_checked_distance
96
+ assert_raises(ArgumentError) { @checker.checked_distance('', '00:05:00') }
97
+ assert_raises(ArgumentError) { @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,21 +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 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
+ # 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(ArgumentError) { @checker.check_positive(-1) }
13
+ assert_raises(ArgumentError) { @checker.check_positive(0) }
14
+ assert_nil @checker.check_positive(1)
15
+ end
16
+
17
+ def test_check_time
18
+ assert_raises(ArgumentError) { @checker.check_time('') }
19
+ assert_nil @checker.check_time('00:00:00')
20
+ end
21
+ end
@@ -1,67 +1,75 @@
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
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_all
65
+ assert_equal 42, @checker.list_all.size
66
+ end
67
+
68
+ def test_list_speed
69
+ assert_equal 16, @checker.list_speed.size
70
+ end
71
+
72
+ def test_list_distance_constants
73
+ assert_equal 26, @checker.list_distance.size
74
+ end
75
+ 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.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joao Gilberto Saraiva
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-15 00:00:00.000000000 Z
11
+ date: 2024-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -80,9 +80,9 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
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.
83
+ description: It is designed for calculations related to distance, speed and time.
84
+ The gem also supports conversion to 42 different units of distance and velocity,
85
+ including metric, nautical and imperial units.
86
86
  email: joaogilberto@tuta.io
87
87
  executables: []
88
88
  extensions: []
@@ -118,8 +118,8 @@ requirements: []
118
118
  rubygems_version: 3.4.6
119
119
  signing_key:
120
120
  specification_version: 4
121
- summary: 'Calcpace: calculate total, distance, velocity and convert distances in an
122
- easy way.'
121
+ summary: 'Calcpace: calculate total, distance, speed, and convert distances and velocity
122
+ in an easy way.'
123
123
  test_files:
124
124
  - test/calcpace/test_calculator.rb
125
125
  - test/calcpace/test_checker.rb