Files
JIMRI/java/test/jmri/jmrix/direct/MakePacketTest.java
T
2026-06-17 14:00:51 +02:00

215 lines
7.8 KiB
Java

package jmri.jmrix.direct;
import jmri.NmraPacket;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
* JUnit tests for the MakePacketTest class
*
* @author Bob Jacobsen Copyright 2004
*/
public class MakePacketTest {
@Test
public void testSimplePacket() {
byte buffer[] = new byte[3];
boolean test_retval;
test_retval = MakePacket.setPreambleLength(15);
buffer[0] = 0;
buffer[1] = 1;
buffer[2] = 0 ^ 1;
int[] result = MakePacket.createStream(buffer);
/**
* resulting stream should be in hex 55 55 55 c6 c6 c6 c6 c6 c6 c6 c6 96
* c6 c6 c6 5c
*/
Assert.assertTrue(test_retval);
Assert.assertEquals("Simple lenght", 16, result[0]);
Assert.assertEquals("Simple 0", 85, result[1]);
Assert.assertEquals("Simple 1 ", 85, result[2]);
Assert.assertEquals("Simple 2 ", 85, result[3]);
Assert.assertEquals("Simple 3", 198, result[4]);
Assert.assertEquals("Simple 4 ", 198, result[5]);
Assert.assertEquals("Simple 5", 198, result[6]);
Assert.assertEquals("Simple 6 ", 198, result[7]);
Assert.assertEquals("Simple 7 ", 198, result[8]);
Assert.assertEquals("Simple 8 ", 198, result[9]);
Assert.assertEquals("Simple 9 ", 198, result[10]);
Assert.assertEquals("Simple 10", 198, result[11]);
Assert.assertEquals("Simple 11", 150, result[12]);
Assert.assertEquals("Simple 12", 198, result[13]);
Assert.assertEquals("Simple 13", 198, result[14]);
Assert.assertEquals("Simple 14", 198, result[15]);
Assert.assertEquals("Simple 15 ", 92, result[16]);
}
@Test
public void testPreamble() {
byte buffer[] = new byte[3];
boolean test_retval;
test_retval = MakePacket.setPreambleLength(20);
Assert.assertEquals("Preamble set to 20", true, test_retval);
/**
* Now actually test that it does generate a serial stream with 20 '1's
* as preamble
*/
buffer[0] = 0;
buffer[1] = 1;
buffer[2] = 0 ^ 1;
int[] result = MakePacket.createStream(buffer);
Assert.assertEquals("preamble", 85, result[3]);
test_retval = MakePacket.setPreambleLength(16);
/**
* should return false since preamble has to be a multiply of 15
*/
Assert.assertEquals("preamble not mutply of 5", false, test_retval);
test_retval = MakePacket.setPreambleLength(15);
Assertions.assertTrue(test_retval);
}
/**
* Test all possible three-byte packets. This ensures that MakePacket thinks
* it can find a way of representing each of those packets. Note that the
* output packet is not checked for correctness.
* <p>
* Unfortunately, due to the number of trials, this takes too long to be
* included in normal runs. Hence it's name has been modified so that JUnit
* will not routinely select it to be run.
*/
@Test
@Disabled("Disabled in JUnit 3")
public void testAll3BytePacket() {
byte i, j;
byte buffer[] = new byte[3];
boolean test_retval;
test_retval = MakePacket.setPreambleLength(15);
Assert.assertTrue(test_retval);
for (i = -128; i < 127; i++) {
for (j = -128; j < 127; j++) {
buffer[0] = i;
buffer[1] = j;
buffer[2] = (byte) (buffer[0] ^ buffer[1]);
int[] result = MakePacket.createStream(buffer);
if (result[0] == 0) {
Assert.assertEquals("test all - invalid lenght", 10, result[0]);
}
}
}
}
/**
* Test all possible combinations of locomotive address (short and long
* forms) and speed value. This ensures that MakePacket thinks it can find a
* way of representing each of those packets. Note that the output packet is
* not checked for correctness.
* <p>
* Unfortunately, due to the number of trials, this takes too long to be
* included in normal runs. Hence it's name has been modified so that JUnit
* will not routinely select it to be run.
*/
@Test
@Disabled("Disabled in JUnit 3")
public void testAllSpeed128Packets() {
int[] result;
int addressRange, speedRange;
byte buffer[];
boolean test_retval, Direction;
Direction = true; /*Set direction to forwards */
test_retval = MakePacket.setPreambleLength(15);
Assert.assertTrue(test_retval);
for (addressRange = 0; addressRange < 10239; addressRange++) {
for (speedRange = 0; speedRange < 127; speedRange++) {
Direction = true;
buffer = NmraPacket.speedStep128Packet(addressRange, true, speedRange, Direction);
result = MakePacket.createStream(buffer);
if (result[0] == 0) {
Assert.assertEquals("test 128 speed forward direction (long addresses) - invalid lenght", 10, result[0]);
}
Direction = false;
buffer = NmraPacket.speedStep128Packet(addressRange, true, speedRange, Direction);
result = MakePacket.createStream(buffer);
if (result[0] == 0) {
Assert.assertEquals("test 128 speed backward direction (long addresses) - invalid lenght", 10, result[0]);
}
}
}
for (addressRange = 0; addressRange < 127; addressRange++) {
for (speedRange = 0; speedRange < 127; speedRange++) {
buffer = NmraPacket.speedStep128Packet(addressRange, false, speedRange, Direction);
result = MakePacket.createStream(buffer);
if (result[0] == 0) {
Assert.assertEquals("test 128 speed (short addresses) - invalid lenght", 10, result[0]);
}
}
}
}
/**
* Test all possible combinations of locomotive address (short and long
* forms) and CV address/value to write. This ensures that MakePacket thinks
* it can find a way of representing each of those packets. Note that the
* output packet is not checked for correctness.
* <p>
* Unfortunately, due to the number of trials, this takes too long to be
* included in normal runs. Hence it's name has been modified so that JUnit
* will not routinely select it to be run.
*/
@Test
@Disabled("Disabled in JUnit 3")
public void testAllOpsCvWrite() {
int addressRange, cvNum, data;
boolean test_retval;
test_retval = MakePacket.setPreambleLength(15);
Assert.assertTrue(test_retval);
for (addressRange = 0; addressRange < 10239; addressRange++) {
for (cvNum = 2; cvNum < 512; cvNum++) {
for (data = 0; data < 127; data++) {
byte[] buffer = NmraPacket.opsCvWriteByte(addressRange, true, cvNum, data);
int[] result = MakePacket.createStream(buffer);
if (result[0] == 0) {
Assert.assertEquals("test ops CV write (long addresses) - invalid lenght", 10, result[0]);
}
if (addressRange < 127) {
buffer = NmraPacket.opsCvWriteByte(addressRange, false, cvNum, data);
result = MakePacket.createStream(buffer);
if (result[0] == 0) {
Assert.assertEquals("test ops CV write (short addresses) - invalid lenght", 10, result[0]);
}
}
}
}
}
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
}