calcpace 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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