Auto-generate packet dataclasses with Jinja (#1374)

This commit is contained in:
Matt
2024-08-31 13:44:19 -04:00
committed by GitHub
parent c19d54c633
commit 169595e56e
140 changed files with 4445 additions and 2097 deletions

View File

@@ -21,171 +21,31 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import edu.wpi.first.math.geometry.*;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.photonvision.common.dataflow.structures.Packet;
import org.photonvision.targeting.MultiTargetPNPResult;
import org.photonvision.targeting.PNPResult;
import org.photonvision.targeting.PhotonPipelineResult;
import org.photonvision.targeting.PhotonTrackedTarget;
import org.photonvision.targeting.PnpResult;
import org.photonvision.targeting.TargetCorner;
import org.photonvision.utils.PacketUtils;
class PacketTest {
@Test
void rotation2dSerde() {
var packet = new Packet(PacketUtils.ROTATION2D_BYTE_SIZE);
var ret = new Rotation2d();
PacketUtils.packRotation2d(packet, ret);
var unpacked = PacketUtils.unpackRotation2d(packet);
assertEquals(ret, unpacked);
}
public void testTargetCorner() {
TargetCorner corner = new TargetCorner(1, 2);
@Test
void quaternionSerde() {
var packet = new Packet(PacketUtils.QUATERNION_BYTE_SIZE);
var ret = new Quaternion();
PacketUtils.packQuaternion(packet, ret);
var unpacked = PacketUtils.unpackQuaternion(packet);
assertEquals(ret, unpacked);
}
var packet = new Packet(0);
@Test
void rotation3dSerde() {
var packet = new Packet(PacketUtils.ROTATION3D_BYTE_SIZE);
var ret = new Rotation3d();
PacketUtils.packRotation3d(packet, ret);
var unpacked = PacketUtils.unpackRotation3d(packet);
assertEquals(ret, unpacked);
}
@Test
void translation2dSerde() {
var packet = new Packet(PacketUtils.TRANSLATION2D_BYTE_SIZE);
var ret = new Translation2d();
PacketUtils.packTranslation2d(packet, ret);
var unpacked = PacketUtils.unpackTranslation2d(packet);
assertEquals(ret, unpacked);
}
@Test
void translation3dSerde() {
var packet = new Packet(PacketUtils.TRANSLATION3D_BYTE_SIZE);
var ret = new Translation3d();
PacketUtils.packTranslation3d(packet, ret);
var unpacked = PacketUtils.unpackTranslation3d(packet);
assertEquals(ret, unpacked);
}
@Test
void transform2dSerde() {
var packet = new Packet(PacketUtils.TRANSFORM2D_BYTE_SIZE);
var ret = new Transform2d();
PacketUtils.packTransform2d(packet, ret);
var unpacked = PacketUtils.unpackTransform2d(packet);
assertEquals(ret, unpacked);
}
@Test
void transform3dSerde() {
var packet = new Packet(PacketUtils.TRANSFORM3D_BYTE_SIZE);
var ret = new Transform3d();
PacketUtils.packTransform3d(packet, ret);
var unpacked = PacketUtils.unpackTransform3d(packet);
assertEquals(ret, unpacked);
}
@Test
void pose2dSerde() {
var packet = new Packet(PacketUtils.POSE2D_BYTE_SIZE);
var ret = new Pose2d();
PacketUtils.packPose2d(packet, ret);
var unpacked = PacketUtils.unpackPose2d(packet);
assertEquals(ret, unpacked);
}
@Test
void pose3dSerde() {
var packet = new Packet(PacketUtils.POSE3D_BYTE_SIZE);
var ret = new Pose3d();
PacketUtils.packPose3d(packet, ret);
var unpacked = PacketUtils.unpackPose3d(packet);
assertEquals(ret, unpacked);
}
@Test
void targetCornerSerde() {
var packet = new Packet(TargetCorner.serde.getMaxByteSize());
var ret = new TargetCorner(0.0, 1.0);
TargetCorner.serde.pack(packet, ret);
var unpacked = TargetCorner.serde.unpack(packet);
assertEquals(ret, unpacked);
}
@Test
void pnpResultSerde() {
var packet = new Packet(PNPResult.serde.getMaxByteSize());
var ret = new PNPResult();
PNPResult.serde.pack(packet, ret);
var unpackedRet = PNPResult.serde.unpack(packet);
assertEquals(ret, unpackedRet);
var packet1 = new Packet(PNPResult.serde.getMaxByteSize());
var ret1 =
new PNPResult(new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1);
PNPResult.serde.pack(packet1, ret1);
var unpackedRet1 = PNPResult.serde.unpack(packet1);
assertEquals(ret1, unpackedRet1);
}
@Test
void multitagResultSerde() {
var packet = new Packet(MultiTargetPNPResult.serde.getMaxByteSize());
var ret =
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3));
MultiTargetPNPResult.serde.pack(packet, ret);
var unpackedRet = MultiTargetPNPResult.serde.unpack(packet);
assertEquals(ret, unpackedRet);
}
@Test
void trackedTargetSerde() {
var packet = new Packet(PhotonTrackedTarget.serde.getMaxByteSize());
var ret =
new PhotonTrackedTarget(
3.0,
4.0,
9.0,
-5.0,
-1,
-1,
-1f,
new Transform3d(),
new Transform3d(),
-1,
List.of(
new TargetCorner(1, 2),
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)),
List.of(
new TargetCorner(1, 2),
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)));
PhotonTrackedTarget.serde.pack(packet, ret);
var unpacked = PhotonTrackedTarget.serde.unpack(packet);
assertEquals(ret, unpacked);
packet.encode(corner);
}
@Test
void pipelineResultSerde() {
var ret1 = new PhotonPipelineResult(1, 2, 3, List.of());
var p1 = new Packet(ret1.getPacketSize());
PhotonPipelineResult.serde.pack(p1, ret1);
var unpackedRet1 = PhotonPipelineResult.serde.unpack(p1);
var p1 = new Packet(10);
PhotonPipelineResult.photonStruct.pack(p1, ret1);
var unpackedRet1 = PhotonPipelineResult.photonStruct.unpack(p1);
assertEquals(ret1, unpackedRet1);
var ret2 =
@@ -236,9 +96,9 @@ class PacketTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))));
var p2 = new Packet(ret2.getPacketSize());
PhotonPipelineResult.serde.pack(p2, ret2);
var unpackedRet2 = PhotonPipelineResult.serde.unpack(p2);
var p2 = new Packet(10);
PhotonPipelineResult.photonStruct.pack(p2, ret2);
var unpackedRet2 = PhotonPipelineResult.photonStruct.unpack(p2);
assertEquals(ret2, unpackedRet2);
var ret3 =
@@ -289,69 +149,14 @@ class PacketTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3)));
var p3 = new Packet(ret3.getPacketSize());
PhotonPipelineResult.serde.pack(p3, ret3);
var unpackedRet3 = PhotonPipelineResult.serde.unpack(p3);
Optional.of(
new MultiTargetPNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of((short) 1, (short) 2, (short) 3))));
var p3 = new Packet(10);
PhotonPipelineResult.photonStruct.pack(p3, ret3);
var unpackedRet3 = PhotonPipelineResult.photonStruct.unpack(p3);
assertEquals(ret3, unpackedRet3);
}
@Test
public void testMultiTargetSerde() {
var result =
new PhotonPipelineResult(
3,
4,
5,
List.of(
new PhotonTrackedTarget(
3.0,
-4.0,
9.0,
4.0,
2,
-1,
-1f,
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)),
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)),
0.25,
List.of(
new TargetCorner(1, 2),
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)),
List.of(
new TargetCorner(1, 2),
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8))),
new PhotonTrackedTarget(
3.0,
-4.0,
9.1,
6.7,
3,
-1,
-1f,
new Transform3d(new Translation3d(4, 2, 3), new Rotation3d(1, 5, 3)),
new Transform3d(new Translation3d(4, 2, 3), new Rotation3d(1, 5, 3)),
0.25,
List.of(
new TargetCorner(1, 2),
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)),
List.of(
new TargetCorner(1, 2),
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3)));
}
}

View File

@@ -35,15 +35,15 @@ public class MultiTargetPNPResultTest {
a =
new MultiTargetPNPResult(
new PNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3));
List.of((short) 1, (short) 2, (short) 3));
b =
new MultiTargetPNPResult(
new PNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3));
List.of((short) 1, (short) 2, (short) 3));
assertEquals(a, b);
}
@@ -52,14 +52,14 @@ public class MultiTargetPNPResultTest {
public void inequalityTest() {
var a =
new MultiTargetPNPResult(
new PNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 8, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(3, 4, 7));
List.of((short) 3, (short) 4, (short) 7));
var b =
new MultiTargetPNPResult(
new PNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3));
List.of((short) 1, (short) 2, (short) 3));
assertNotEquals(a, b);
}

View File

@@ -27,23 +27,23 @@ import org.junit.jupiter.api.Test;
public class PNPResultTest {
@Test
public void equalityTest() {
var a = new PNPResult();
var b = new PNPResult();
var a = new PnpResult();
var b = new PnpResult();
assertEquals(a, b);
a = new PNPResult(new Transform3d(0, 1, 2, new Rotation3d()), 0.0);
b = new PNPResult(new Transform3d(0, 1, 2, new Rotation3d()), 0.0);
a = new PnpResult(new Transform3d(0, 1, 2, new Rotation3d()), 0.0);
b = new PnpResult(new Transform3d(0, 1, 2, new Rotation3d()), 0.0);
assertEquals(a, b);
a =
new PNPResult(
new PnpResult(
new Transform3d(0, 1, 2, new Rotation3d()),
new Transform3d(3, 4, 5, new Rotation3d()),
0.5,
0.1,
0.1);
b =
new PNPResult(
new PnpResult(
new Transform3d(0, 1, 2, new Rotation3d()),
new Transform3d(3, 4, 5, new Rotation3d()),
0.5,
@@ -54,19 +54,19 @@ public class PNPResultTest {
@Test
public void inequalityTest() {
var a = new PNPResult(new Transform3d(0, 1, 2, new Rotation3d()), 0.0);
var b = new PNPResult(new Transform3d(3, 4, 5, new Rotation3d()), 0.1);
var a = new PnpResult(new Transform3d(0, 1, 2, new Rotation3d()), 0.0);
var b = new PnpResult(new Transform3d(3, 4, 5, new Rotation3d()), 0.1);
assertNotEquals(a, b);
a =
new PNPResult(
new PnpResult(
new Transform3d(3, 4, 5, new Rotation3d()),
new Transform3d(0, 1, 2, new Rotation3d()),
0.5,
0.1,
0.1);
b =
new PNPResult(
new PnpResult(
new Transform3d(3, 4, 5, new Rotation3d()),
new Transform3d(0, 1, 2, new Rotation3d()),
0.5,

View File

@@ -24,6 +24,7 @@ import edu.wpi.first.math.geometry.Rotation3d;
import edu.wpi.first.math.geometry.Transform3d;
import edu.wpi.first.math.geometry.Translation3d;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Test;
public class PhotonPipelineResultTest {
@@ -179,10 +180,11 @@ public class PhotonPipelineResultTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3)));
Optional.of(
new MultiTargetPNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of((short) 1, (short) 2, (short) 3))));
b =
new PhotonPipelineResult(
3,
@@ -231,10 +233,11 @@ public class PhotonPipelineResultTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3)));
Optional.of(
new MultiTargetPNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of((short) 1, (short) 2, (short) 3))));
assertEquals(a, b);
}
@@ -386,10 +389,11 @@ public class PhotonPipelineResultTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 8, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(3, 4, 7)));
Optional.of(
new MultiTargetPNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 8, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of((short) 3, (short) 4, (short) 7))));
b =
new PhotonPipelineResult(
3,
@@ -438,10 +442,11 @@ public class PhotonPipelineResultTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3)));
Optional.of(
new MultiTargetPNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of((short) 1, (short) 2, (short) 3))));
assertNotEquals(a, b);
}
}

View File

@@ -25,7 +25,7 @@ import edu.wpi.first.math.geometry.Translation3d;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.photonvision.targeting.MultiTargetPNPResult;
import org.photonvision.targeting.PNPResult;
import org.photonvision.targeting.PnpResult;
public class MultiTargetPNPResultProtoTest {
@Test
@@ -38,9 +38,9 @@ public class MultiTargetPNPResultProtoTest {
result =
new MultiTargetPNPResult(
new PNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3));
List.of((short) 1, (short) 2, (short) 3));
serializedResult = MultiTargetPNPResult.proto.createMessage();
MultiTargetPNPResult.proto.pack(serializedResult, result);
unpackedResult = MultiTargetPNPResult.proto.unpack(serializedResult);

View File

@@ -22,21 +22,21 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import edu.wpi.first.math.geometry.Rotation3d;
import edu.wpi.first.math.geometry.Transform3d;
import org.junit.jupiter.api.Test;
import org.photonvision.targeting.PNPResult;
import org.photonvision.targeting.PnpResult;
public class PNPResultProtoTest {
@Test
public void protobufTest() {
var pnpRes = new PNPResult();
var serializedPNPRes = PNPResult.proto.createMessage();
PNPResult.proto.pack(serializedPNPRes, pnpRes);
var unpackedPNPRes = PNPResult.proto.unpack(serializedPNPRes);
var pnpRes = new PnpResult();
var serializedPNPRes = PnpResult.proto.createMessage();
PnpResult.proto.pack(serializedPNPRes, pnpRes);
var unpackedPNPRes = PnpResult.proto.unpack(serializedPNPRes);
assertEquals(pnpRes, unpackedPNPRes);
pnpRes = new PNPResult(new Transform3d(1, 2, 3, new Rotation3d(1, 2, 3)), 0.1);
serializedPNPRes = PNPResult.proto.createMessage();
PNPResult.proto.pack(serializedPNPRes, pnpRes);
unpackedPNPRes = PNPResult.proto.unpack(serializedPNPRes);
pnpRes = new PnpResult(new Transform3d(1, 2, 3, new Rotation3d(1, 2, 3)), 0.1);
serializedPNPRes = PnpResult.proto.createMessage();
PnpResult.proto.pack(serializedPNPRes, pnpRes);
unpackedPNPRes = PnpResult.proto.unpack(serializedPNPRes);
assertEquals(pnpRes, unpackedPNPRes);
}
}

View File

@@ -23,6 +23,7 @@ import edu.wpi.first.math.geometry.Rotation3d;
import edu.wpi.first.math.geometry.Transform3d;
import edu.wpi.first.math.geometry.Translation3d;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.photonvision.targeting.*;
@@ -139,10 +140,11 @@ public class PhotonPipelineResultProtoTest {
new TargetCorner(3, 4),
new TargetCorner(5, 6),
new TargetCorner(7, 8)))),
new MultiTargetPNPResult(
new PNPResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of(1, 2, 3)));
Optional.of(
new MultiTargetPNPResult(
new PnpResult(
new Transform3d(new Translation3d(1, 2, 3), new Rotation3d(1, 2, 3)), 0.1),
List.of((short) 1, (short) 2, (short) 3))));
serializedResult = PhotonPipelineResult.proto.createMessage();
PhotonPipelineResult.proto.pack(serializedResult, result);
unpackedResult = PhotonPipelineResult.proto.unpack(serializedResult);