@ -15,12 +15,14 @@
* /
package org.thingsboard.script.api.tbel ;
import com.google.common.collect.Lists ;
import com.google.common.primitives.Bytes ;
import com.google.common.primitives.Ints ;
import lombok.extern.slf4j.Slf4j ;
import org.junit.jupiter.api.Test ;
import org.junit.jupiter.api.AfterEach ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.mvel2.ExecutionContext ;
import org.mvel2.ParserContext ;
import org.mvel2.SandboxedParserConfiguration ;
@ -31,28 +33,28 @@ import java.io.IOException;
import java.math.BigInteger ;
import java.nio.ByteBuffer ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Calendar ;
import java.util.Collections ;
import java.util.List ;
import java.util.Random ;
import static java.lang.Character.MAX_RADIX ;
import static java.lang.Character.MIN_RADIX ;
@Slf4j
public class TbUtilsTest {
private ExecutionContext ctx ;
private final String intValHex = "41EA62CC" ;
private final float floatVal = 29 . 29824f ;
private final String floatValStr = "29.29824" ;
private final String floatValHexRev = "CC62EA41" ;
private final float floatValRev = - 5 . 948442E7f ;
private final long longVal = 0x409B04B10CB295EAL ;
private final String longValHex = "409B04B10CB295EA" ;
private final long longValRev = 0xEA95B20CB1049B40L ;
private final String longValHexRev = "EA95B20CB1049B40" ;
private final String doubleValStr = "1729.1729" ;
private final double doubleVal = 1729 . 1729 ;
private final double doubleValRev = - 2 . 7208640774822924E205 ;
@ -86,10 +88,9 @@ public class TbUtilsTest {
Assertions . assertEquals ( 0xBAAB , TbUtils . parseHexToInt ( "ABBA" , false ) ) ;
Assertions . assertEquals ( 0xAABBCC , TbUtils . parseHexToInt ( "AABBCC" , true ) ) ;
Assertions . assertEquals ( 0xAABBCC , TbUtils . parseHexToInt ( "CCBBAA" , false ) ) ;
Assertions . assertEquals ( 0xAABBCCDD , TbUtils . parseHexToInt ( "AABBCCDD" , true ) ) ;
Assertions . assertEquals ( 0xAABBCCDD , TbUtils . parseHexToInt ( "DDCCBBAA" , false ) ) ;
Assertions . assertEquals ( 0xDDCCBBAA , TbUtils . parseHexToInt ( "DDCCBBAA" , true ) ) ;
Assertions . assertEquals ( 0xDDCCBBAA , TbUtils . parseHexToInt ( "AABBCCDD" , false ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseHexToInt ( "AABBCCDD" , true ) ) ;
Assertions . assertEquals ( 0x11BBCC22 , TbUtils . parseHexToInt ( "11BBCC22" , true ) ) ;
Assertions . assertEquals ( 0x11BBCC22 , TbUtils . parseHexToInt ( "22CCBB11" , false ) ) ;
}
@Test
@ -208,15 +209,28 @@ public class TbUtilsTest {
Assertions . assertNull ( TbUtils . parseInt ( "" ) ) ;
Assertions . assertNull ( TbUtils . parseInt ( " " ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 0 ) . get ( ) , TbUtils . parseInt ( "0" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 0 ) . get ( ) , TbUtils . parseInt ( "-0" ) ) ;
Assertions . assertEquals ( ( Integer ) 0 , TbUtils . parseInt ( "0" ) ) ;
Assertions . assertEquals ( ( Integer ) 0 , TbUtils . parseInt ( "-0" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 473 ) . get ( ) , TbUtils . parseInt ( "473" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 255 ) . get ( ) , TbUtils . parseInt ( "-0xFF" ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "FF" ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "-0xFF123" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 255 ) . get ( ) , TbUtils . parseInt ( "-FF" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 255 ) . get ( ) , TbUtils . parseInt ( "FF" ) ) ;
Assertions . assertThrows ( IllegalArgumentException . class , ( ) - > TbUtils . parseInt ( "FFF" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 2578 ) . get ( ) , TbUtils . parseInt ( "-0A12" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 2578 ) . get ( ) , TbUtils . parseHexToInt ( "-0A12" ) ) ;
Assertions . assertThrows ( IllegalArgumentException . class , ( ) - > TbUtils . parseHexToInt ( "A12" , false ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 14866 ) . get ( ) , TbUtils . parseBigEndianHexToInt ( "-3A12" ) ) ;
Assertions . assertThrows ( IllegalArgumentException . class , ( ) - > TbUtils . parseLittleEndianHexToInt ( "-A12" ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "0xFG" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 102 ) . get ( ) , TbUtils . parseInt ( "1100110" , 2 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 102 ) . get ( ) , TbUtils . parseInt ( "1111111111111111111111111111111111111111111111111111111110011010" , 2 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "1100210" , 2 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 13158 ) . get ( ) , TbUtils . parseInt ( "11001101100110" , 2 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 13158 ) . get ( ) , TbUtils . parseInt ( "1111111111111111111111111111111111111111111111111100110010011010" , 2 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 63 ) . get ( ) , TbUtils . parseInt ( "77" , 8 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "18" , 8 ) ) ;
@ -224,19 +238,32 @@ public class TbUtilsTest {
Assertions . assertEquals ( java . util . Optional . of ( - 255 ) . get ( ) , TbUtils . parseInt ( "-FF" , 16 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "FG" , 16 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( Integer . MAX_VALUE ) . get ( ) , TbUtils . parseInt ( Integer . toString ( Integer . MAX_VALUE ) , 10 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( BigInteger . valueOf ( Integer . MAX_VALUE ) . add ( BigInteger . valueOf ( 1 ) ) . toString ( 10 ) , 10 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( Integer . MIN_VALUE ) . get ( ) , TbUtils . parseInt ( Integer . toString ( Integer . MIN_VALUE ) , 10 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( BigInteger . valueOf ( Integer . MIN_VALUE ) . subtract ( BigInteger . valueOf ( 1 ) ) . toString ( 10 ) , 10 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 506070563 ) . get ( ) , TbUtils . parseInt ( "KonaIn" , 30 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "KonaIn" , 10 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( ".456" , 10 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseInt ( "4562." , 10 ) ) ;
Assertions . assertThrows ( IllegalArgumentException . class , ( ) - > TbUtils . parseInt ( "KonaIn" , MAX_RADIX + 1 ) ) ;
Assertions . assertThrows ( IllegalArgumentException . class , ( ) - > TbUtils . parseInt ( "KonaIn" , MIN_RADIX - 1 ) ) ;
Assertions . assertThrows ( IllegalArgumentException . class , ( ) - > TbUtils . parseInt ( "KonaIn" , 12 ) ) ;
}
@Test
public void parseFloat ( ) {
String floatValStr = "29.29824" ;
Assertions . assertEquals ( java . util . Optional . of ( floatVal ) . get ( ) , TbUtils . parseFloat ( floatValStr ) ) ;
String floatValHex = "41EA62CC" ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseHexToFloat ( floatValHex ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatValRev , TbUtils . parseHexToFloat ( floatValHex , false ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseBigEndianHexToFloat ( floatValHex ) ) ) ;
String floatValHexRev = "CC62EA41" ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseLittleEndianHexToFloat ( floatValHexRev ) ) ) ;
}
@Test
@ -246,21 +273,13 @@ public class TbUtilsTest {
Assertions . assertEquals ( 0 , Float . compare ( 29 . 298f , actualF ) ) ;
}
@Test
public void parseHexToFloat ( ) {
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseHexToFloat ( intValHex ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatValRev , TbUtils . parseHexToFloat ( intValHex , false ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseBigEndianHexToFloat ( intValHex ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseLittleEndianHexToFloat ( floatValHexRev ) ) ) ;
}
@Test
public void arseBytesToFloat ( ) {
byte [ ] floatValByte = { 65 , - 22 , 98 , - 52 } ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseBytesToFloat ( floatValByte , 0 ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatValRev , TbUtils . parseBytesToFloat ( floatValByte , 0 , false ) ) ) ;
List < Byte > floatVaList = Bytes . asList ( floatValByte ) ;
List < Byte > floatVaList = Bytes . asList ( floatValByte ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatVal , TbUtils . parseBytesToFloat ( floatVaList , 0 ) ) ) ;
Assertions . assertEquals ( 0 , Float . compare ( floatValRev , TbUtils . parseBytesToFloat ( floatVaList , 0 , false ) ) ) ;
}
@ -271,14 +290,15 @@ public class TbUtilsTest {
Assertions . assertNull ( TbUtils . parseLong ( "" ) ) ;
Assertions . assertNull ( TbUtils . parseLong ( " " ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 0L ) . get ( ) , TbUtils . parseLong ( "0" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 0L ) . get ( ) , TbUtils . parseLong ( "-0" ) ) ;
Assertions . assertEquals ( ( Long ) 0L , TbUtils . parseLong ( "0" ) ) ;
Assertions . assertEquals ( ( Long ) 0L , TbUtils . parseLong ( "-0" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 473L ) . get ( ) , TbUtils . parseLong ( "473" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 65535L ) . get ( ) , TbUtils . parseLong ( "-0xFFFF" ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseLong ( "FFFFFFFF" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 4294967295L ) . get ( ) , TbUtils . parseLong ( "FFFFFFFF" ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseLong ( "0xFGFFFFFF" ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 13158L ) . get ( ) , TbUtils . parseLong ( "11001101100110" , 2 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( - 13158L ) . get ( ) , TbUtils . parseLong ( "1111111111111111111111111111111111111111111111111100110010011010" , 2 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseLong ( "11001101100210" , 2 ) ) ;
Assertions . assertEquals ( java . util . Optional . of ( 9223372036854775807L ) . get ( ) , TbUtils . parseLong ( "777777777777777777777" , 8 ) ) ;
@ -295,10 +315,7 @@ public class TbUtilsTest {
Assertions . assertEquals ( java . util . Optional . of ( 218840926543L ) . get ( ) , TbUtils . parseLong ( "KonaLong" , 27 ) ) ;
Assertions . assertThrows ( NumberFormatException . class , ( ) - > TbUtils . parseLong ( "KonaLong" , 10 ) ) ;
}
@Test
public void parseHexToLong ( ) {
Assertions . assertEquals ( longVal , TbUtils . parseHexToLong ( longValHex ) ) ;
Assertions . assertEquals ( longVal , TbUtils . parseHexToLong ( longValHexRev , false ) ) ;
Assertions . assertEquals ( longVal , TbUtils . parseBigEndianHexToLong ( longValHex ) ) ;
@ -312,14 +329,20 @@ public class TbUtilsTest {
Bytes . reverse ( longValByte ) ;
Assertions . assertEquals ( longVal , TbUtils . parseBytesToLong ( longValByte , 0 , 8 , false ) ) ;
List < Byte > longVaList = Bytes . asList ( longValByte ) ;
List < Byte > longVaList = Bytes . asList ( longValByte ) ;
Assertions . assertEquals ( longVal , TbUtils . parseBytesToLong ( longVaList , 0 , 8 , false ) ) ;
long longValRev = 0xEA95B20CB1049B40L ;
Assertions . assertEquals ( longValRev , TbUtils . parseBytesToLong ( longVaList , 0 , 8 ) ) ;
}
@Test
public void parsDouble ( ) {
String doubleValStr = "1729.1729" ;
Assertions . assertEquals ( java . util . Optional . of ( doubleVal ) . get ( ) , TbUtils . parseDouble ( doubleValStr ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseHexToDouble ( longValHex ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleValRev , TbUtils . parseHexToDouble ( longValHex , false ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseBigEndianHexToDouble ( longValHex ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseLittleEndianHexToDouble ( longValHexRev ) ) ) ;
}
@Test
@ -329,21 +352,13 @@ public class TbUtilsTest {
Assertions . assertEquals ( 0 , Double . compare ( 1729 . 173 , actualD ) ) ;
}
@Test
public void parseHexToDouble ( ) {
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseHexToDouble ( longValHex ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleValRev , TbUtils . parseHexToDouble ( longValHex , false ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseBigEndianHexToDouble ( longValHex ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseLittleEndianHexToDouble ( longValHexRev ) ) ) ;
}
@Test
public void parseBytesToDouble ( ) {
byte [ ] doubleValByte = { 64 , - 101 , 4 , - 79 , 12 , - 78 , - 107 , - 22 } ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseBytesToDouble ( doubleValByte , 0 ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleValRev , TbUtils . parseBytesToDouble ( doubleValByte , 0 , false ) ) ) ;
List < Byte > doubleVaList = Bytes . asList ( doubleValByte ) ;
List < Byte > doubleVaList = Bytes . asList ( doubleValByte ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleVal , TbUtils . parseBytesToDouble ( doubleVaList , 0 ) ) ) ;
Assertions . assertEquals ( 0 , Double . compare ( doubleValRev , TbUtils . parseBytesToDouble ( doubleVaList , 0 , false ) ) ) ;
}
@ -354,16 +369,17 @@ public class TbUtilsTest {
ExecutionHashMap < String , Object > expectedJson = new ExecutionHashMap < > ( 1 , ctx ) ;
expectedJson . put ( "hello" , "world" ) ;
List < Byte > expectedBytes = TbUtils . stringToBytes ( ctx , expectedStr ) ;
Object actualJson = TbUtils . decodeToJson ( ctx , expectedBytes ) ;
Assertions . assertEquals ( expectedJson , actualJson ) ;
Object actualJson = TbUtils . decodeToJson ( ctx , expectedBytes ) ;
Assertions . assertEquals ( expectedJson , actualJson ) ;
}
@Test
public void parseStringDecodeToJson ( ) throws IOException {
String expectedStr = "{\"hello\": \"world\"}" ;
ExecutionHashMap < String , Object > expectedJson = new ExecutionHashMap < > ( 1 , ctx ) ;
expectedJson . put ( "hello" , "world" ) ;
Object actualJson = TbUtils . decodeToJson ( ctx , expectedStr ) ;
Assertions . assertEquals ( expectedJson , actualJson ) ;
Object actualJson = TbUtils . decodeToJson ( ctx , expectedStr ) ;
Assertions . assertEquals ( expectedJson , actualJson ) ;
}
@Test
@ -386,8 +402,8 @@ public class TbUtilsTest {
@Test
public void bytesFromList ( ) {
byte [ ] arrayBytes = { ( byte ) 0x00 , ( byte ) 0x08 , ( byte ) 0x10 , ( byte ) 0x1C , ( byte ) 0xFF , ( byte ) 0xFC , ( byte ) 0xAD , ( byte ) 0x88 , ( byte ) 0x75 , ( byte ) 0x74 , ( byte ) 0x8A , ( byte ) 0x82 } ;
Object [ ] arrayMix = { "0x00" , 8 , "16" , "0x1C" , 255 , ( byte ) 0xFC , 173 , 136 , 117 , 116 , - 118 , "-126" } ;
byte [ ] arrayBytes = { ( byte ) 0x00 , ( byte ) 0x08 , ( byte ) 0x10 , ( byte ) 0x1C , ( byte ) 0xFF , ( byte ) 0xFC , ( byte ) 0xAD , ( byte ) 0x88 , ( byte ) 0x75 , ( byte ) 0x74 , ( byte ) 0x8A , ( byte ) 0x82 } ;
Object [ ] arrayMix = { "0x00" , 8 , "16" , "0x1C" , 255 , ( byte ) 0xFC , 173 , 136 , 117 , 116 , - 118 , "-126" } ;
String expected = new String ( arrayBytes ) ;
ArrayList < Byte > listBytes = new ArrayList < > ( arrayBytes . length ) ;
@ -397,12 +413,36 @@ public class TbUtilsTest {
Assertions . assertEquals ( expected , TbUtils . bytesToString ( listBytes ) ) ;
ArrayList < Object > listMix = new ArrayList < > ( arrayMix . length ) ;
for ( Object element : arrayMix ) {
listMix . add ( element ) ;
}
Collections . addAll ( listMix , arrayMix ) ;
Assertions . assertEquals ( expected , TbUtils . bytesToString ( listMix ) ) ;
}
@Test
public void bytesFromList_SpecSymbol ( ) {
List < String > listHex = new ArrayList < > ( Arrays . asList ( "1D" , "0x1D" , "1F" , "0x1F" , "0x20" , "0x20" ) ) ;
byte [ ] expectedBytes = new byte [ ] { 29 , 29 , 31 , 31 , 32 , 32 } ;
String actualStr = TbUtils . bytesToString ( listHex ) ;
byte [ ] actualBytes = actualStr . getBytes ( ) ;
Assertions . assertArrayEquals ( expectedBytes , actualBytes ) ;
Assertions . assertTrue ( actualStr . isBlank ( ) ) ;
listHex = new ArrayList < > ( Arrays . asList ( "0x21" , "0x21" ) ) ;
expectedBytes = new byte [ ] { 33 , 33 } ;
actualStr = TbUtils . bytesToString ( listHex ) ;
actualBytes = actualStr . getBytes ( ) ;
Assertions . assertArrayEquals ( expectedBytes , actualBytes ) ;
Assertions . assertFalse ( actualStr . isBlank ( ) ) ;
Assertions . assertEquals ( "!!" , actualStr ) ;
listHex = new ArrayList < > ( Arrays . asList ( "21" , "0x21" ) ) ;
expectedBytes = new byte [ ] { 21 , 33 } ;
actualStr = TbUtils . bytesToString ( listHex ) ;
actualBytes = actualStr . getBytes ( ) ;
Assertions . assertArrayEquals ( expectedBytes , actualBytes ) ;
Assertions . assertFalse ( actualStr . isBlank ( ) ) ;
Assertions . assertEquals ( "!" , actualStr . substring ( 1 ) ) ;
Assertions . assertEquals ( '\u0015' , actualStr . charAt ( 0 ) ) ;
Assertions . assertEquals ( 21 , actualStr . charAt ( 0 ) ) ;
}
@Test
public void bytesFromList_Error ( ) {
List < String > listHex = new ArrayList < > ( ) ;
@ -411,14 +451,7 @@ public class TbUtilsTest {
TbUtils . bytesToString ( listHex ) ;
Assertions . fail ( "Should throw NumberFormatException" ) ;
} catch ( NumberFormatException e ) {
Assertions . assertTrue ( e . getMessage ( ) . contains ( "Failed radix: [16] for value: \"FG\"!" ) ) ;
}
listHex . add ( 0 , "1F" ) ;
try {
TbUtils . bytesToString ( listHex ) ;
Assertions . fail ( "Should throw NumberFormatException" ) ;
} catch ( NumberFormatException e ) {
Assertions . assertTrue ( e . getMessage ( ) . contains ( "Failed radix: [10] for value: \"1F\"!" ) ) ;
Assertions . assertTrue ( e . getMessage ( ) . contains ( "Value: \"FG\" is not numeric or hexDecimal format!" ) ) ;
}
List < String > listIntString = new ArrayList < > ( ) ;
@ -482,6 +515,161 @@ public class TbUtilsTest {
String uriDecodeActual = TbUtils . decodeURI ( uriEncodeActual ) ;
Assertions . assertEquals ( uriOriginal , uriDecodeActual ) ;
}
@Test
public void intToHex_Test ( ) {
Assertions . assertEquals ( "FFF5EE" , TbUtils . intToHex ( - 2578 ) ) ;
Assertions . assertEquals ( "0xFFD8FFA6" , TbUtils . intToHex ( 0xFFD8FFA6 , true , true ) ) ;
Assertions . assertEquals ( "0xA6FFD8FF" , TbUtils . intToHex ( 0xFFD8FFA6 , false , true ) ) ;
Assertions . assertEquals ( "0x7FFFFFFF" , TbUtils . intToHex ( Integer . MAX_VALUE , true , true ) ) ;
Assertions . assertEquals ( "0x80000000" , TbUtils . intToHex ( Integer . MIN_VALUE , true , true ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . intToHex ( 0xAB , true , true ) ) ;
Assertions . assertEquals ( "0xABCD" , TbUtils . intToHex ( 0xABCD , true , true ) ) ;
Assertions . assertEquals ( "0xABCDEF" , TbUtils . intToHex ( 0xABCDEF , true , true ) ) ;
Assertions . assertEquals ( "0xCDAB" , TbUtils . intToHex ( 0xABCDEF , false , true , 4 ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . intToHex ( 171 , true , true ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . intToHex ( 0xAB , false , true ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . intToHex ( 0xAB , true , true , 2 ) ) ;
Assertions . assertEquals ( "AB" , TbUtils . intToHex ( 0xAB , false , false , 2 ) ) ;
Assertions . assertEquals ( "AB" , TbUtils . intToHex ( 171 , true , false ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . intToHex ( 0xAB , true , true ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . intToHex ( 0xAB , false , true ) ) ;
Assertions . assertEquals ( "AB" , TbUtils . intToHex ( 0xAB , false , false ) ) ;
Assertions . assertEquals ( "0xABCD" , TbUtils . intToHex ( 0xABCD , true , true ) ) ;
Assertions . assertEquals ( "0xCDAB" , TbUtils . intToHex ( 0xABCD , false , true ) ) ;
Assertions . assertEquals ( "0xCD" , TbUtils . intToHex ( 0xABCD , true , true , 2 ) ) ;
Assertions . assertEquals ( "AB" , TbUtils . intToHex ( 0xABCD , false , false , 2 ) ) ;
}
@Test
public void longToHex_Test ( ) {
Assertions . assertEquals ( "0x7FFFFFFFFFFFFFFF" , TbUtils . longToHex ( Long . MAX_VALUE , true , true ) ) ;
Assertions . assertEquals ( "0x8000000000000000" , TbUtils . longToHex ( Long . MIN_VALUE , true , true ) ) ;
Assertions . assertEquals ( "0xFFD8FFA6FFD8FFA6" , TbUtils . longToHex ( 0xFFD8FFA6FFD8FFA6L , true , true ) ) ;
Assertions . assertEquals ( "0xA6FFD8FFA6FFCEFF" , TbUtils . longToHex ( 0xFFCEFFA6FFD8FFA6L , false , true ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . longToHex ( 0xABL , true , true ) ) ;
Assertions . assertEquals ( "0xABCD" , TbUtils . longToHex ( 0xABCDL , true , true ) ) ;
Assertions . assertEquals ( "0xABCDEF" , TbUtils . longToHex ( 0xABCDEFL , true , true ) ) ;
Assertions . assertEquals ( "0xABEFCDAB" , TbUtils . longToHex ( 0xABCDEFABCDEFL , false , true , 8 ) ) ;
Assertions . assertEquals ( "0xAB" , TbUtils . longToHex ( 0xABL , true , true , 2 ) ) ;
Assertions . assertEquals ( "AB" , TbUtils . longToHex ( 0xABL , false , false , 2 ) ) ;
Assertions . assertEquals ( "0xFFA6" , TbUtils . longToHex ( 0xFFD8FFA6FFD8FFA6L , true , true , 4 ) ) ;
Assertions . assertEquals ( "D8FF" , TbUtils . longToHex ( 0xFFD8FFA6FFD8FFA6L , false , false , 4 ) ) ;
}
@Test
public void numberToString_Test ( ) {
Assertions . assertEquals ( "11001101100110" , TbUtils . intLongToString ( 13158L , 2 ) ) ;
Assertions . assertEquals ( "1111111111111111111111111111111111111111111111111111111110011010" , TbUtils . intLongToString ( - 102L , 2 ) ) ;
Assertions . assertEquals ( "1111111111111111111111111111111111111111111111111100110010011010" , TbUtils . intLongToString ( - 13158L , 2 ) ) ;
Assertions . assertEquals ( "777777777777777777777" , TbUtils . intLongToString ( Long . MAX_VALUE , 8 ) ) ;
Assertions . assertEquals ( "1000000000000000000000" , TbUtils . intLongToString ( Long . MIN_VALUE , 8 ) ) ;
Assertions . assertEquals ( "9223372036854775807" , TbUtils . intLongToString ( Long . MAX_VALUE ) ) ;
Assertions . assertEquals ( "-9223372036854775808" , TbUtils . intLongToString ( Long . MIN_VALUE ) ) ;
Assertions . assertEquals ( "3366" , TbUtils . intLongToString ( 13158L , 16 ) ) ;
Assertions . assertEquals ( "FFCC9A" , TbUtils . intLongToString ( - 13158L , 16 ) ) ;
Assertions . assertEquals ( "0xFFCC9A" , TbUtils . intLongToString ( - 13158L , 16 , true , true ) ) ;
Assertions . assertEquals ( "0x0400" , TbUtils . intLongToString ( 1024L , 16 , true , true ) ) ;
Assertions . assertNotEquals ( "400" , TbUtils . intLongToString ( 1024L , 16 ) ) ;
Assertions . assertEquals ( "0xFFFC00" , TbUtils . intLongToString ( - 1024L , 16 , true , true ) ) ;
Assertions . assertNotEquals ( "0xFC00" , TbUtils . intLongToString ( - 1024L , 16 , true , true ) ) ;
Assertions . assertEquals ( "hazelnut" , TbUtils . intLongToString ( 1356099454469L , MAX_RADIX ) ) ;
}
@Test
public void intToHexWithPrintUnsignedBytes_Test ( ) {
Integer value = - 40 ;
String intToHexLe = TbUtils . intToHex ( value , false , true ) ;
String intToHexBe = TbUtils . intToHex ( value , true , true ) ;
List < Byte > hexTopByteLe = TbUtils . hexToBytes ( ctx , intToHexLe ) ;
List < Byte > hexTopByteBe = TbUtils . hexToBytes ( ctx , intToHexBe ) ;
byte [ ] arrayBytes = { - 40 , - 1 } ;
List < Byte > expectedHexTopByteLe = Bytes . asList ( arrayBytes ) ;
List < Byte > expectedHexTopByteBe = Lists . reverse ( expectedHexTopByteLe ) ;
Assertions . assertEquals ( expectedHexTopByteLe , hexTopByteLe ) ;
Assertions . assertEquals ( expectedHexTopByteBe , hexTopByteBe ) ;
List < Integer > actualLe = TbUtils . printUnsignedBytes ( ctx , hexTopByteLe ) ;
List < Integer > actualBe = TbUtils . printUnsignedBytes ( ctx , hexTopByteBe ) ;
List < Integer > expectedLe = Ints . asList ( 216 , 255 ) ;
List < Integer > expectedBe = Lists . reverse ( expectedLe ) ;
Assertions . assertEquals ( expectedLe , actualLe ) ;
Assertions . assertEquals ( expectedBe , actualBe ) ;
}
@Test
public void floatToHex_Test ( ) {
Float value = 20 . 89f ;
String expectedHex = "0x41A71EB8" ;
String valueHexRev = "0xB81EA741" ;
String actual = TbUtils . floatToHex ( value ) ;
Assertions . assertEquals ( expectedHex , actual ) ;
Float valueActual = TbUtils . parseHexToFloat ( actual ) ;
Assertions . assertEquals ( value , valueActual ) ;
valueActual = TbUtils . parseHexToFloat ( valueHexRev , false ) ;
Assertions . assertEquals ( value , valueActual ) ;
}
@Test
public void doubleToHex_Test ( ) {
String expectedHex = "0x409B04B10CB295EA" ;
String actual = TbUtils . doubleToHex ( doubleVal ) ;
Assertions . assertEquals ( expectedHex , actual ) ;
Double valueActual = TbUtils . parseHexToDouble ( actual ) ;
Assertions . assertEquals ( doubleVal , valueActual ) ;
actual = TbUtils . doubleToHex ( doubleVal , false ) ;
String expectedHexRev = "0xEA95B20CB1049B40" ;
Assertions . assertEquals ( expectedHexRev , actual ) ;
}
@Test
public void raiseError_Test ( ) {
String message = "frequency_weighting_type must be 0, 1 or 2." ;
Object value = 4 ;
try {
TbUtils . raiseError ( message , value ) ;
Assertions . fail ( "Should throw NumberFormatException" ) ;
} catch ( RuntimeException e ) {
Assertions . assertTrue ( e . getMessage ( ) . contains ( "frequency_weighting_type must be 0, 1 or 2. for value 4" ) ) ;
}
try {
TbUtils . raiseError ( message ) ;
Assertions . fail ( "Should throw NumberFormatException" ) ;
} catch ( RuntimeException e ) {
Assertions . assertTrue ( e . getMessage ( ) . contains ( "frequency_weighting_type must be 0, 1 or 2." ) ) ;
}
}
@Test
public void isBinary_Test ( ) {
Assertions . assertEquals ( 2 , TbUtils . isBinary ( "1100110" ) ) ;
Assertions . assertEquals ( - 1 , TbUtils . isBinary ( "2100110" ) ) ;
}
@Test
public void isOctal_Test ( ) {
Assertions . assertEquals ( 8 , TbUtils . isOctal ( "4567734" ) ) ;
Assertions . assertEquals ( - 1 , TbUtils . isOctal ( "8100110" ) ) ;
}
@Test
public void isDecimal_Test ( ) {
Assertions . assertEquals ( 10 , TbUtils . isDecimal ( "4567039" ) ) ;
Assertions . assertEquals ( - 1 , TbUtils . isDecimal ( "C100110" ) ) ;
}
@Test
public void isHexadecimal_Test ( ) {
Assertions . assertEquals ( 16 , TbUtils . isHexadecimal ( "F5D7039" ) ) ;
Assertions . assertEquals ( - 1 , TbUtils . isHexadecimal ( "K100110" ) ) ;
}
private static List < Byte > toList ( byte [ ] data ) {
List < Byte > result = new ArrayList < > ( data . length ) ;
for ( Byte b : data ) {