mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-02 02:51:42 +00:00
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.
36 lines
1.2 KiB
Java
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);
|
|
}
|
|
}
|