diff --git a/wpiunits/src/main/java/edu/wpi/first/units/Measure.java b/wpiunits/src/main/java/edu/wpi/first/units/Measure.java index c4687b790c..8982e4638d 100644 --- a/wpiunits/src/main/java/edu/wpi/first/units/Measure.java +++ b/wpiunits/src/main/java/edu/wpi/first/units/Measure.java @@ -178,6 +178,21 @@ public interface Measure> extends Comparable> { return newUnit.of(magnitude()); } + /** + * Creates a velocity measure equivalent to this one per a unit of time. + * + *
+   *   Radians.of(3.14).per(Second) // Velocity<Angle> equivalent to RadiansPerSecond.of(3.14)
+   * 
+ * + * @param time the unit of time + * @return the velocity measure + */ + default Measure> per(Time time) { + var newUnit = unit().per(time); + return newUnit.of(magnitude()); + } + /** * Adds another measure to this one. The resulting measure has the same unit as this one. * diff --git a/wpiunits/src/test/java/edu/wpi/first/units/MeasureTest.java b/wpiunits/src/test/java/edu/wpi/first/units/MeasureTest.java index 53f950ddec..b2c729e3ec 100644 --- a/wpiunits/src/test/java/edu/wpi/first/units/MeasureTest.java +++ b/wpiunits/src/test/java/edu/wpi/first/units/MeasureTest.java @@ -78,7 +78,7 @@ class MeasureTest { } @Test - void testPerUnitTime() { + void testPerMeasureTime() { var measure = Units.Kilograms.of(144); var dt = Units.Milliseconds.of(53); @@ -89,6 +89,16 @@ class MeasureTest { assertEquals(Units.Kilograms.per(Units.Milliseconds), result.unit()); } + @Test + void testPerUnitTime() { + var measure = Units.Kilograms.of(144); + var result = measure.per(Units.Millisecond); + + assertEquals(Velocity.class, result.unit().getClass()); + assertEquals(144_000.0, result.baseUnitMagnitude(), 1e-5); + assertEquals(Units.Kilograms.per(Units.Milliseconds), result.unit()); + } + @Test void testTimesMeasure() { var m1 = Units.Volts.of(1.567);