tbel_test_doc: add Helper functions: pad, numberToRadixString, parseHex, parseBytes

This commit is contained in:
nick 2024-10-28 17:24:15 +02:00
parent b98730a7b8
commit 589822a8c2

View File

@ -1203,6 +1203,7 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest {
invokeScript(evalScript(decoderStr), msgStr);
}).hasMessageContaining(message);
}
@Test
public void printUnsignedBytes_Test() throws ExecutionException, InterruptedException {
msgStr = "{}";
@ -1224,6 +1225,249 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest {
assertEquals(expected, actual);
}
@Test
public void pad_Test() throws ExecutionException, InterruptedException {
msgStr = "{}";
// padStart
decoderStr = """
var str1 = "010011";
var str2 ="1001010011";
var fullNumber = "203439900FFCD5581";
var last4Digits = fullNumber.substring(11);
return {
padStart1: padStart(str1, 8, '0'),
padStart2: padStart(str2, 8, '0'),
padStart16: padStart(str2, 16, '*'),
padStartFullNumber: padStart(last4Digits, fullNumber.length(), '*')
}
""";
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
expected.put("padStart1", "00010011");
expected.put("padStart2", "1001010011");
expected.put("padStart16", "******1001010011");
expected.put("padStartFullNumber", "***********CD5581");
Object actual = invokeScript(evalScript(decoderStr), msgStr);
assertEquals(expected, actual);
// padEnd
decoderStr = """
var str1 = "010011";
var str2 ="1001010011";
var fullNumber = "203439900FFCD5581";
var last4Digits = fullNumber.substring(0, 11);
return {
padEnd1: padEnd(str1, 8, '0'),
padEnd2: padEnd(str2, 8, '0'),
padEnd16: padEnd(str2, 16, '*'),
padEndFullNumber: padEnd(last4Digits, fullNumber.length(), '*')
}
""";
expected = new LinkedHashMap<>();
expected.put("padEnd1", "01001100");
expected.put("padEnd2", "1001010011");
expected.put("padEnd16", "1001010011******");
expected.put("padEndFullNumber", "203439900FF******");
actual = invokeScript(evalScript(decoderStr), msgStr);
assertEquals(expected, actual);
}
@Test
public void numberToRadixStringIntLongFloatDouble_Test() throws ExecutionException, InterruptedException {
msgStr = "{}";
decoderStr = """
var i = 0x7FFFFFFF;
return {
"intToHex1": intToHex(i, true, true),
"intToHex2": intToHex(171, true, false),
"intToHex3": intToHex(0xABCDEF, false, true, 4),
"intToHex4": intToHex(0xABCD, false, false, 2),
"longToHex1": longToHex(9223372036854775807, true, true),
"longToHex2": longToHex(0x7A12BCD3, true, true, 4),
"longToHex3": longToHex(0x7A12BCD3, false, false, 4),
"floatToHex1": floatToHex(123456789.00),
"floatToHex2": floatToHex(123456789.00, false),
"doubleToHex1": doubleToHex(1729.1729d),
"doubleToHex2": doubleToHex(1729.1729d, false)
}
""";
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
expected.put("intToHex1", "0x7FFFFFFF");
expected.put("intToHex2", "AB");
expected.put("intToHex3", "0xCDAB");
expected.put("intToHex4", "AB");
expected.put("longToHex1", "0x7FFFFFFFFFFFFFFF");
expected.put("longToHex2", "0xBCD3");
expected.put("longToHex3", "127A");
expected.put("floatToHex1", "0x4CEB79A3");
expected.put("floatToHex2", "0xA379EB4C");
expected.put("doubleToHex1", "0x409B04B10CB295EA");
expected.put("doubleToHex2", "0xEA95B20CB1049B40");
Object actual = invokeScript(evalScript(decoderStr), msgStr);
assertEquals(expected, actual);
}
@Test
public void intLongToRadixString_Test() throws ExecutionException, InterruptedException {
msgStr = "{}";
decoderStr = """
return {
"bin1": intLongToRadixString(58, 2),
"bin2": intLongToRadixString(9223372036854775807, 2),
"octal1": intLongToRadixString(13158, 8),
"octal2": intLongToRadixString(-13158, 8),
"decimal": intLongToRadixString(-13158, 10),
"hexDecimal1": intLongToRadixString(13158, 16),
"hexDecimal2": intLongToRadixString(-13158, 16),
"hexDecimal3": intLongToRadixString(9223372036854775807, 16),
"hexDecimal4": intLongToRadixString(-13158, 16, true, true)
}
""";
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
expected.put("bin1", "00111010");
expected.put("bin2", "0111111111111111111111111111111111111111111111111111111111111111");
expected.put("octal1", "31546");
expected.put("octal2", "1777777777777777746232");
expected.put("decimal", "-13158");
expected.put("hexDecimal1", "3366");
expected.put("hexDecimal2", "FFCC9A");
expected.put("hexDecimal3", "7FFFFFFFFFFFFFFF");
expected.put("hexDecimal4", "0xFFCC9A");
Object actual = invokeScript(evalScript(decoderStr), msgStr);
assertEquals(expected, actual);
}
@Test
public void parseHex_Test() throws ExecutionException, InterruptedException {
msgStr = "{}";
decoderStr = """
return {
"hexToInt1": parseHexToInt("BBAA"),
"hexToInt2": parseHexToInt("BBAA", true),
"hexToInt3": parseHexToInt("AABB", false),
"hexToInt4": parseHexToInt("BBAA", false),
"hexToFloat1": parseHexToFloat("41EA62CC"),
"hexToFloat2": parseHexToFloat("41EA62CC", true),
"hexToFloat3": parseHexToFloat("41EA62CC", false),
"hexToFloat4": parseHexToFloat("CC62EA41", false),
"hexIntLongToFloat1": parseHexIntLongToFloat("0x0A", true),
"hexIntLongToFloat2": parseHexIntLongToFloat("0x0A", false),
"hexIntLongToFloat3": parseHexIntLongToFloat("0x00000A", true),
"hexIntLongToFloat4": parseHexIntLongToFloat("0x0A0000", false),
"hexIntLongToFloat5": parseHexIntLongToFloat("0x000A0A", true),
"hexIntLongToFloat6": parseHexIntLongToFloat("0x0A0A00", false),
"hexToDouble1": parseHexToDouble("409B04B10CB295EA"),
"hexToDouble2": parseHexToDouble("409B04B10CB295EA", false),
"hexToDouble3": parseHexToDouble("409B04B10CB295EA", true),
"hexToDouble4": parseHexToDouble("EA95B20CB1049B40", false)
}
""";
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
expected.put("hexToInt1", 48042);
expected.put("hexToInt2", 48042);
expected.put("hexToInt3", 48042);
expected.put("hexToInt4", 43707);
expected.put("hexToFloat1", 29.29824f);
expected.put("hexToFloat2", 29.29824f);
expected.put("hexToFloat3", -5.948442E7f);
expected.put("hexToFloat4", 29.29824f);
expected.put("hexIntLongToFloat1", 10.0f);
expected.put("hexIntLongToFloat2", 10.0f);
expected.put("hexIntLongToFloat3", 10.0f);
expected.put("hexIntLongToFloat4", 10.0f);
expected.put("hexIntLongToFloat5", 2570.0f);
expected.put("hexIntLongToFloat6", 2570.0f);
expected.put("hexToDouble1", 1729.1729);
expected.put("hexToDouble2", -2.7208640774822924E205);
expected.put("hexToDouble3", 1729.1729);
expected.put("hexToDouble4", 1729.1729);
Object actual = invokeScript(evalScript(decoderStr), msgStr);
assertEquals(expected, actual);
}
@Test
public void parseBytes_Test() throws ExecutionException, InterruptedException {
byte[] bytesExecutionArrayList = new byte[]{(byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD};
msgStr = "{}";
decoderStr = """
var bytes = [0xBB, 0xAA];
var list = [-69, 83];
var intValByte = [0xAA, 0xBB, 0xCC, 0xDD];
var longValByte = [64, -101, 4, -79, 12, -78, -107, -22];
var bytesFloat = [0x0A];
var floatValByte = [0x41, 0xEA, 0x62, 0xCC];
var floatValList = [65, -22, 98, -52];
var intValByteFromInt = [0x00, 0x00, 0x00, 0x0A];
var dataAT101 = "0x01756403671B01048836BF7701F000090722050000";
var byteAT101 = hexToBytes(dataAT101);
var offsetLatInt = 9;
var coordinatesAsHex = "0x32D009423F23B300B0106E08D96B6C00";
var coordinatesasBytes = hexToBytes(coordinatesAsHex);
var offsetLatLong = 0;
var factor = 1e15;
var bytesExecutionArrayList = [0xAA, 0xBB, 0xCC, 0xDD];
return {
"bytesToHex1": bytesToHex(bytes),
"bytesToHex2": bytesToHex(list),
"bytesToInt1": parseBytesToInt(intValByte, 0, 3),
"bytesToInt2": parseBytesToInt(intValByte, 0, 3, true),
"bytesToInt3": parseBytesToInt(intValByte, 0, 3, false),
"bytesToLong1": parseBytesToLong(longValByte, 0, 8),
"bytesToLong2": parseBytesToLong(longValByte, 0, 8, false),
"bytesToFloat1": parseBytesToFloat(bytesFloat),
"bytesToFloat2": parseBytesToFloat(floatValByte, 0),
"bytesToFloat3": parseBytesToFloat(floatValByte, 0, 2, false),
"bytesToFloat4": parseBytesToFloat(floatValByte, 0, 2, true),
"bytesToFloat5": parseBytesToFloat(floatValByte, 0, 3, false),
"bytesToFloat6": parseBytesToFloat(floatValByte, 0, 3, true),
"bytesToFloat7": parseBytesToFloat(floatValByte, 0, 4, false),
"bytesToFloat8": parseBytesToFloat(floatValList, 0),
"bytesToFloat9": parseBytesToFloat(floatValList, 0, 4, false),
"bytesIntToFloat1": parseBytesIntToFloat(intValByteFromInt, 3, 1, true),
"bytesIntToFloat2": parseBytesIntToFloat(intValByteFromInt, 3, 1, false),
"bytesIntToFloat3": parseBytesIntToFloat(intValByteFromInt, 2, 2, true),
"bytesIntToFloat4": parseBytesIntToFloat(intValByteFromInt, 2, 2, false),
"bytesIntToFloat5": parseBytesIntToFloat(intValByteFromInt, 0, 4, true),
"bytesIntToFloat6": parseBytesIntToFloat(intValByteFromInt, 0, 4, false),
"bytesIntToFloat7": parseBytesIntToFloat(byteAT101, offsetLatInt, 4, false) / 1000000,
"bytesIntToFloat8": parseBytesIntToFloat(byteAT101, offsetLatInt + 4, 4, false) / 1000000,
"bytesLongToDouble1": parseBytesLongToDouble(coordinatesasBytes, offsetLatLong, 8, false) / factor,
"bytesLongToDouble2": parseBytesLongToDouble(coordinatesasBytes, offsetLatLong + 8, 8, false) / factor,
"bytesLongToExecutionArrayList": bytesToExecutionArrayList(bytesExecutionArrayList)
}
""";
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
expected.put("bytesToHex1", "BBAA");
expected.put("bytesToHex2", "BB53");
expected.put("bytesToInt1", 11189196);
expected.put("bytesToInt2", 11189196);
expected.put("bytesToInt3", 13417386);
expected.put("bytesToLong1", 4655319798286292458L);
expected.put("bytesToLong2", -1543131529725306048L);
expected.put("bytesToFloat1", 1.4E-44f);
expected.put("bytesToFloat2", 29.29824f);
expected.put("bytesToFloat3", 8.4034E-41f);
expected.put("bytesToFloat4", 2.3646E-41f);
expected.put("bytesToFloat5", 9.083913E-39f);
expected.put("bytesToFloat6", 6.053388E-39f);
expected.put("bytesToFloat7", -5.948442E7f);
expected.put("bytesToFloat8", 29.29824f);
expected.put("bytesToFloat9", -5.948442E7f);
expected.put("bytesIntToFloat1", 10.0f);
expected.put("bytesIntToFloat2", 10.0f);
expected.put("bytesIntToFloat3", 10.0f);
expected.put("bytesIntToFloat4", 2560.0f);
expected.put("bytesIntToFloat5", 10.0f);
expected.put("bytesIntToFloat6", 1.6777216E8f);
expected.put("bytesIntToFloat7", 24.62495f);
expected.put("bytesIntToFloat8", 118.030576f);
expected.put("bytesLongToDouble1", 50.422775429058610d);
expected.put("bytesLongToDouble2", 30.517877378257072d);
expected.put("bytesLongToExecutionArrayList", bytesToList(bytesExecutionArrayList));
Object actual = invokeScript(evalScript(decoderStr), msgStr);
assertEquals(expected, actual);
}
// parseBinaryArray
private List splice(List oldList, int start, int deleteCount, Object... values) {
start = initStartIndex(oldList, start);