From a705ed54edfe64d12267c7847c3e8d79f456aad1 Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Tue, 22 Sep 2020 14:01:47 -0700 Subject: [PATCH] Add toMsg method to Time class Signed-off-by: Jacob Perron --- .../src/main/java/org/ros2/rcljava/Time.java | 8 +++++ .../test/java/org/ros2/rcljava/TimeTest.java | 35 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/rcljava/src/main/java/org/ros2/rcljava/Time.java b/rcljava/src/main/java/org/ros2/rcljava/Time.java index f5b864e0..02d517ed 100644 --- a/rcljava/src/main/java/org/ros2/rcljava/Time.java +++ b/rcljava/src/main/java/org/ros2/rcljava/Time.java @@ -60,6 +60,14 @@ public Time(final long secs, final long nanos, final ClockType ct) { this.nanoseconds = TimeUnit.SECONDS.toNanos(secs) + nanos; } + public builtin_interfaces.msg.Time toMsg() { + long seconds = this.nanoseconds / 1000000000; + long nanos = this.nanoseconds % 1000000000; + builtin_interfaces.msg.Time msg = new builtin_interfaces.msg.Time(); + msg.setSec((int)seconds); + msg.setNanosec((int)nanos); + return msg; + } public long nanoseconds() { return nanoseconds; diff --git a/rcljava/src/test/java/org/ros2/rcljava/TimeTest.java b/rcljava/src/test/java/org/ros2/rcljava/TimeTest.java index f84d7ae0..7cf0019d 100644 --- a/rcljava/src/test/java/org/ros2/rcljava/TimeTest.java +++ b/rcljava/src/test/java/org/ros2/rcljava/TimeTest.java @@ -37,6 +37,16 @@ public final void testTimeNoArgConstructor() { assertEquals(ClockType.SYSTEM_TIME, time.clockType()); } + @Test + public final void testTimeFromMsgConstructor() { + builtin_interfaces.msg.Time timeMsg = new builtin_interfaces.msg.Time(); + timeMsg.setSec(42); + timeMsg.setNanosec(100); + Time time = new Time(timeMsg, ClockType.SYSTEM_TIME); + assertEquals(42000000100L, time.nanoseconds()); + assertEquals(ClockType.SYSTEM_TIME, time.clockType()); + } + @Test public final void testTimeNanos() { Time time = new Time(45, ClockType.SYSTEM_TIME); @@ -60,4 +70,29 @@ public final void testTimeBadSecs() { public final void testTimeBadNanos() { Time time = new Time(0, -45, ClockType.SYSTEM_TIME); } + + @Test + public final void testTimeToMsg() { + { + Time time = new Time(); + builtin_interfaces.msg.Time timeMsgOut = time.toMsg(); + assertEquals(0, timeMsgOut.getSec()); + assertEquals(0, timeMsgOut.getNanosec()); + } + { + builtin_interfaces.msg.Time timeMsg = new builtin_interfaces.msg.Time(); + timeMsg.setSec(42); + timeMsg.setNanosec(100); + Time time = new Time(timeMsg, ClockType.SYSTEM_TIME); + builtin_interfaces.msg.Time timeMsgOut = time.toMsg(); + assertEquals(42, timeMsgOut.getSec()); + assertEquals(100, timeMsgOut.getNanosec()); + } + { + Time time = new Time(0, 45, ClockType.SYSTEM_TIME); + builtin_interfaces.msg.Time timeMsgOut = time.toMsg(); + assertEquals(0, timeMsgOut.getSec()); + assertEquals(45, timeMsgOut.getNanosec()); + } + } }