Files
allwpilib/wpiunits/src/test/java/edu/wpi/first/units/DistanceTest.java
Sam Carlberg 6c9dcc157e [wpiunits] Change units to track their base unit, instead of their base class (#6342)
Unit objects now have a reference to the base unit from which they're derived. Constructing a unit object without specifying a base unit implicitly signifies that it's its own base unit, eg new Angle(null, 1, "Radian", "rad") would be the base angle unit of radians, while new Angle(Radians, 2 * PI, "Rotation", "R") would be a new angle unit based on radians.

This fixes much of the hacky code surrounding the derived unit types Velocity, Per, and Mult, but is a breaking change for any user code that defines custom unit classes or uses the anonymous unit type.
2024-05-12 06:15:56 -07:00

36 lines
1.2 KiB
Java

// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.units;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
class DistanceTest {
@Test
void testBaseUnitDistancePerTime() {
Velocity<Distance> anonBaseUnit =
new Distance(null, 1, "D", "d").per(new Time(null, 1, "T", "t"));
assertTrue(Units.MetersPerSecond.equivalent(anonBaseUnit));
}
@Test
void testFeetPerSecond() {
Velocity<Distance> feetPerMillisecond = Units.Feet.per(Units.Milliseconds);
// one foot per millisecond
// = (1 / 3.28084) meters per (1 / 1000) seconds
// = (1000 / 3.28084) meters per second
double asBaseMeasure = feetPerMillisecond.of(1).in(Units.MetersPerSecond);
assertEquals(1000 / 3.28084, asBaseMeasure, 1e-3);
// one meter per second = 1 mm per millisecond = 0.00328084 feet per millisecond
double asContrivedMeasure = Units.MetersPerSecond.of(1).in(feetPerMillisecond);
assertEquals(3.28084 / 1000, asContrivedMeasure, 1e-8);
}
}