running-tools

A collection of tools for runners and their coaches
git clone https://git.ashermorgan.net/running-tools/
Log | Files | Refs | README

commit f8f62e95150a7e2ce9a4d5541c0f6c56ae52570f
parent 2c4ba07038a94b1f16b333c37de4786d78fa17ed
Author: ashermorgan <59518073+ashermorgan@users.noreply.github.com>
Date:   Thu, 12 Aug 2021 21:19:51 -0700

Make all unit names plural

Diffstat:
Msrc/utils/units.js | 83+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Msrc/views/PaceCalculator.vue | 66+++++++++++++++++++++++++++++++++---------------------------------
Mtests/unit/PaceCalculator.spec.js | 36++++++++++++++++++------------------
Mtests/unit/units.spec.js | 33+++++++++++++++++++--------------
4 files changed, 113 insertions(+), 105 deletions(-)

diff --git a/src/utils/units.js b/src/utils/units.js @@ -2,9 +2,9 @@ * The time units */ const TIME_UNITS = { - second: 'second', - minute: 'minute', - hour: 'hour', + seconds: 'seconds', + minutes: 'minutes', + hours: 'hours', }; @@ -13,9 +13,9 @@ const TIME_UNITS = { * The time unit names */ const TIME_UNIT_NAMES = { - second: 'Second', - minute: 'Minute', - hour: 'Hour', + seconds: 'Seconds', + minutes: 'Minutes', + hours: 'Hours', }; @@ -24,9 +24,9 @@ const TIME_UNIT_NAMES = { * The time unit symbols */ const TIME_UNIT_SYMBOLS = { - second: 's', - minute: 'min', - hour: 'hr', + seconds: 's', + minutes: 'min', + hours: 'hr', }; @@ -35,9 +35,9 @@ const TIME_UNIT_SYMBOLS = { * The value of each time unit in seconds */ const TIME_UNIT_VALUES = { - second: 1, - minute: 1 * 60, - hour: 1 * 60 * 60, + seconds: 1, + minutes: 1 * 60, + hours: 1 * 60 * 60, }; @@ -46,11 +46,11 @@ const TIME_UNIT_VALUES = { * The distance units */ const DISTANCE_UNITS = { - meter: 'meter', - kilometer: 'kilometer', - yard: 'yard', - mile: 'mile', - marathon: 'marathon', + meters: 'meters', + kilometers: 'kilometers', + yards: 'yards', + miles: 'miles', + marathons: 'marathons', }; @@ -59,11 +59,11 @@ const DISTANCE_UNITS = { * The distance unit names */ const DISTANCE_UNIT_NAMES = { - meter: 'Meter', - kilometer: 'Kilometer', - yard: 'Yard', - mile: 'Mile', - marathon: 'Marathon', + meters: 'Meters', + kilometers: 'Kilometers', + yards: 'Yards', + miles: 'Miles', + marathons: 'Marathons', }; @@ -72,11 +72,11 @@ const DISTANCE_UNIT_NAMES = { * The distance unit symbols */ const DISTANCE_UNIT_SYMBOLS = { - meter: 'm', - kilometer: 'km', - yard: 'yd', - mile: 'mi', - marathon: 'marathon', + meters: 'm', + kilometers: 'km', + yards: 'yd', + miles: 'mi', + marathons: 'marathons', }; @@ -85,11 +85,11 @@ const DISTANCE_UNIT_SYMBOLS = { * The value of each distance unit in meters */ const DISTANCE_UNIT_VALUES = { - meter: 1, - kilometer: 1000, - yard: 0.9144, - mile: 1609.3499, - marathon: 42195, + meters: 1, + kilometers: 1000, + yards: 0.9144, + miles: 1609.3499, + marathons: 42195, }; @@ -132,8 +132,8 @@ const SPEED_UNIT_SYMBOLS = { */ const SPEED_UNIT_VALUES = { meters_per_second: 1, - kilometers_per_hour: DISTANCE_UNIT_VALUES.kilometer / TIME_UNIT_VALUES.hour, - miles_per_hour: DISTANCE_UNIT_VALUES.mile / TIME_UNIT_VALUES.hour, + kilometers_per_hour: DISTANCE_UNIT_VALUES.kilometers / TIME_UNIT_VALUES.hours, + miles_per_hour: DISTANCE_UNIT_VALUES.miles / TIME_UNIT_VALUES.hours, }; @@ -154,8 +154,8 @@ const PACE_UNITS = { */ const PACE_UNIT_NAMES = { seconds_per_meter: 'Seconds per Meter', - minutes_per_kilometer: 'Minutes per kilometer', - minutes_per_mile: 'Minutes per Mile', + seconds_per_kilometer: 'Time per Kilometer', + seconds_per_mile: 'Time per Mile', }; @@ -165,8 +165,8 @@ const PACE_UNIT_NAMES = { */ const PACE_UNIT_SYMBOLS = { seconds_per_meter: 's/m', - minutes_per_kilometer: 'min/km', - minutes_per_mile: 'min/mi', + seconds_er_kilometer: '/km', + seconds_per_mile: '/mi', }; @@ -176,8 +176,8 @@ const PACE_UNIT_SYMBOLS = { */ const PACE_UNIT_VALUES = { seconds_per_meter: 1, - seconds_per_kilometer: TIME_UNIT_VALUES.second / DISTANCE_UNIT_VALUES.kilometer, - seconds_per_mile: TIME_UNIT_VALUES.second / DISTANCE_UNIT_VALUES.mile, + seconds_per_kilometer: TIME_UNIT_VALUES.seconds / DISTANCE_UNIT_VALUES.kilometers, + seconds_per_mile: TIME_UNIT_VALUES.seconds / DISTANCE_UNIT_VALUES.miles, }; @@ -292,6 +292,9 @@ function formatDuration(value, padding=6, digits=2) { // Validate padding padding = Math.min(padding, 6); + // Prevent rounding errors + value = parseFloat(value.toFixed(digits)); + // Calculate parts let hours = Math.floor(value / 3600); let minutes = Math.floor((value % 3600) / 60); diff --git a/src/views/PaceCalculator.vue b/src/views/PaceCalculator.vue @@ -5,7 +5,7 @@ <decimal-input v-model="inputDistance" :min="0" :digits="2"/> <select v-model="inputUnit"> <option v-for="(value, key) in distanceUnits" :key="key" :value="key"> - {{ value }}(s) + {{ value }} </option> </select> in @@ -65,7 +65,7 @@ export default { /** * The input distance unit */ - inputUnit: 'mile', + inputUnit: 'miles', /** * The input time value @@ -91,35 +91,35 @@ export default { * The output targets */ targets: [ - { distanceValue: 100, distanceUnit: 'meter' }, - { distanceValue: 200, distanceUnit: 'meter' }, - { distanceValue: 300, distanceUnit: 'meter' }, - { distanceValue: 400, distanceUnit: 'meter' }, - { distanceValue: 600, distanceUnit: 'meter' }, - { distanceValue: 800, distanceUnit: 'meter' }, - { distanceValue: 1000, distanceUnit: 'meter' }, - { distanceValue: 1200, distanceUnit: 'meter' }, - { distanceValue: 1500, distanceUnit: 'meter' }, - { distanceValue: 1600, distanceUnit: 'meter' }, - { distanceValue: 3200, distanceUnit: 'meter' }, - - { distanceValue: 1, distanceUnit: 'mile' }, - { distanceValue: 2, distanceUnit: 'mile' }, - { distanceValue: 3, distanceUnit: 'mile' }, - { distanceValue: 5, distanceUnit: 'mile' }, - { distanceValue: 10, distanceUnit: 'mile' }, - - { distanceValue: 2, distanceUnit: 'kilometer' }, - { distanceValue: 3, distanceUnit: 'kilometer' }, - { distanceValue: 4, distanceUnit: 'kilometer' }, - { distanceValue: 5, distanceUnit: 'kilometer' }, - { distanceValue: 6, distanceUnit: 'kilometer' }, - { distanceValue: 8, distanceUnit: 'kilometer' }, - { distanceValue: 10, distanceUnit: 'kilometer' }, - { distanceValue: 15, distanceUnit: 'kilometer' }, - - { distanceValue: 0.5, distanceUnit: 'marathon' }, - { distanceValue: 1, distanceUnit: 'marathon' }, + { distanceValue: 100, distanceUnit: 'meters' }, + { distanceValue: 200, distanceUnit: 'meters' }, + { distanceValue: 300, distanceUnit: 'meters' }, + { distanceValue: 400, distanceUnit: 'meters' }, + { distanceValue: 600, distanceUnit: 'meters' }, + { distanceValue: 800, distanceUnit: 'meters' }, + { distanceValue: 1000, distanceUnit: 'meters' }, + { distanceValue: 1200, distanceUnit: 'meters' }, + { distanceValue: 1500, distanceUnit: 'meters' }, + { distanceValue: 1600, distanceUnit: 'meters' }, + { distanceValue: 3200, distanceUnit: 'meters' }, + + { distanceValue: 1, distanceUnit: 'miles' }, + { distanceValue: 2, distanceUnit: 'miles' }, + { distanceValue: 3, distanceUnit: 'miles' }, + { distanceValue: 5, distanceUnit: 'miles' }, + { distanceValue: 10, distanceUnit: 'miles' }, + + { distanceValue: 2, distanceUnit: 'kilometers' }, + { distanceValue: 3, distanceUnit: 'kilometers' }, + { distanceValue: 4, distanceUnit: 'kilometers' }, + { distanceValue: 5, distanceUnit: 'kilometers' }, + { distanceValue: 6, distanceUnit: 'kilometers' }, + { distanceValue: 8, distanceUnit: 'kilometers' }, + { distanceValue: 10, distanceUnit: 'kilometers' }, + { distanceValue: 15, distanceUnit: 'kilometers' }, + + { distanceValue: 0.5, distanceUnit: 'marathons' }, + { distanceValue: 1, distanceUnit: 'marathons' }, ], }; }, @@ -130,7 +130,7 @@ export default { */ pace: function() { let distance = unitUtils.convertDistance(this.inputDistance, - this.inputUnit, unitUtils.DISTANCE_UNITS.meter); + this.inputUnit, unitUtils.DISTANCE_UNITS.meters); return paceUtils.getPace(distance, this.inputTime); }, @@ -143,7 +143,7 @@ export default { for (let row of this.targets) { // Convert distance into meters let distance = unitUtils.convertDistance(row.distanceValue, - row.distanceUnit, unitUtils.DISTANCE_UNITS.meter); + row.distanceUnit, unitUtils.DISTANCE_UNITS.meters); // Calculate time to travel distance at input pace let time = paceUtils.getTime(this.pace, distance); diff --git a/tests/unit/PaceCalculator.spec.js b/tests/unit/PaceCalculator.spec.js @@ -10,24 +10,24 @@ describe('PaceCalculator.vue', () => { // Override input values wrapper.setData({ inputDistance: 1, - inputUnit: 'kilometer', + inputUnit: 'kilometers', inputTime: 100, }); // Override targets await wrapper.setData({ targets: [ - { distanceValue: 10, distanceUnit: 'meter' }, - { distanceValue: 20, distanceUnit: 'meter' }, - { distanceValue: 100, distanceUnit: 'meter' }, - { distanceValue: 1, distanceUnit: 'kilometer' }, + { distanceValue: 10, distanceUnit: 'meters' }, + { distanceValue: 20, distanceUnit: 'meters' }, + { distanceValue: 100, distanceUnit: 'meters' }, + { distanceValue: 1, distanceUnit: 'kilometers' }, ]}); // Assert results are correct expect(wrapper.vm._computedWatchers.results.value).to.deep.equal([ - { distanceValue: 10, distanceUnit: 'meter', time: 1 }, - { distanceValue: 20, distanceUnit: 'meter', time: 2 }, - { distanceValue: 100, distanceUnit: 'meter', time: 10 }, - { distanceValue: 1, distanceUnit: 'kilometer', time: 100 }, + { distanceValue: 10, distanceUnit: 'meters', time: 1 }, + { distanceValue: 20, distanceUnit: 'meters', time: 2 }, + { distanceValue: 100, distanceUnit: 'meters', time: 10 }, + { distanceValue: 1, distanceUnit: 'kilometers', time: 100 }, ]); }); @@ -38,24 +38,24 @@ describe('PaceCalculator.vue', () => { // Override input values wrapper.setData({ inputDistance: 1, - inputUnit: 'kilometer', + inputUnit: 'kilometers', inputTime: 100, }); // Override targets await wrapper.setData({ targets: [ - { distanceValue: 20, distanceUnit: 'meter' }, - { distanceValue: 100, distanceUnit: 'meter' }, - { distanceValue: 1, distanceUnit: 'kilometer' }, - { distanceValue: 10, distanceUnit: 'meter' }, + { distanceValue: 20, distanceUnit: 'meters' }, + { distanceValue: 100, distanceUnit: 'meters' }, + { distanceValue: 1, distanceUnit: 'kilometers' }, + { distanceValue: 10, distanceUnit: 'meters' }, ]}); // Assert results are correct expect(wrapper.vm._computedWatchers.results.value).to.deep.equal([ - { distanceValue: 10, distanceUnit: 'meter', time: 1 }, - { distanceValue: 20, distanceUnit: 'meter', time: 2 }, - { distanceValue: 100, distanceUnit: 'meter', time: 10 }, - { distanceValue: 1, distanceUnit: 'kilometer', time: 100 }, + { distanceValue: 10, distanceUnit: 'meters', time: 1 }, + { distanceValue: 20, distanceUnit: 'meters', time: 2 }, + { distanceValue: 100, distanceUnit: 'meters', time: 10 }, + { distanceValue: 1, distanceUnit: 'kilometers', time: 100 }, ]); }); }); diff --git a/tests/unit/units.spec.js b/tests/unit/units.spec.js @@ -8,8 +8,8 @@ describe('utils/units.js', () => { it('90 seconds should equal 1.5 minutes', () => { let result = units.convertTime( 90, - units.TIME_UNITS.second, - units.TIME_UNITS.minute + units.TIME_UNITS.seconds, + units.TIME_UNITS.minutes, ); expect(result).to.equal(1.5); }); @@ -17,8 +17,8 @@ describe('utils/units.js', () => { it('1.5 minutes should equal 95 seconds', () => { let result = units.convertTime( 1.5, - units.TIME_UNITS.minute, - units.TIME_UNITS.second + units.TIME_UNITS.minutes, + units.TIME_UNITS.seconds, ); expect(result).to.equal(90); }); @@ -29,8 +29,8 @@ describe('utils/units.js', () => { it('100 meters should equal 0.1 kilometers', () => { let result = units.convertDistance( 100, - units.DISTANCE_UNITS.meter, - units.DISTANCE_UNITS.kilometer + units.DISTANCE_UNITS.meters, + units.DISTANCE_UNITS.kilometers, ); expect(result).to.equal(0.1); }); @@ -38,8 +38,8 @@ describe('utils/units.js', () => { it('0.1 kilometers should equal 100 meters', () => { let result = units.convertDistance( 0.1, - units.DISTANCE_UNITS.kilometer, - units.DISTANCE_UNITS.meter + units.DISTANCE_UNITS.kilometers, + units.DISTANCE_UNITS.meters, ); expect(result).to.equal(100); }); @@ -51,7 +51,7 @@ describe('utils/units.js', () => { let result = units.convertSpeed( 1000, units.SPEED_UNITS.meters_per_second, - units.SPEED_UNITS.kilometers_per_hour + units.SPEED_UNITS.kilometers_per_hour, ); expect(result).to.equal(3600); }); @@ -60,7 +60,7 @@ describe('utils/units.js', () => { let result = units.convertSpeed( 3600, units.SPEED_UNITS.kilometers_per_hour, - units.SPEED_UNITS.meters_per_second + units.SPEED_UNITS.meters_per_second, ); expect(result).to.equal(1000); }); @@ -72,7 +72,7 @@ describe('utils/units.js', () => { let result = units.convertPace( 1, units.PACE_UNITS.seconds_per_meter, - units.PACE_UNITS.seconds_per_kilometer + units.PACE_UNITS.seconds_per_kilometer, ); expect(result).to.equal(1000); }); @@ -81,7 +81,7 @@ describe('utils/units.js', () => { let result = units.convertPace( 1000, units.PACE_UNITS.seconds_per_kilometer, - units.PACE_UNITS.seconds_per_meter + units.PACE_UNITS.seconds_per_meter, ); expect(result).to.equal(1); }); @@ -93,7 +93,7 @@ describe('utils/units.js', () => { let result = units.convertSpeedPace( 3600, units.SPEED_UNITS.kilometers_per_hour, - units.PACE_UNITS.seconds_per_kilometer + units.PACE_UNITS.seconds_per_kilometer, ); expect(result).to.equal(1); }); @@ -102,7 +102,7 @@ describe('utils/units.js', () => { let result = units.convertSpeedPace( 3600, units.PACE_UNITS.seconds_per_kilometer, - units.SPEED_UNITS.kilometers_per_hour + units.SPEED_UNITS.kilometers_per_hour, ); expect(result).to.equal(1); }); @@ -167,5 +167,10 @@ describe('utils/units.js', () => { let result = units.formatDuration(-3600 - 120 - 3 - 0.4); expect(result).to.equal('-01:02:03.40'); }); + + it('should correctly format 59.9999', () => { + let result = units.formatDuration(59.9999); + expect(result).to.equal('00:01:00.00'); + }); }); });