|
|
@@ -10,11 +10,11 @@ import java.io.IOException;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.BigInteger;
|
|
|
-import java.text.ChoiceFormat;
|
|
|
import java.time.Instant;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.GregorianCalendar;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
import net.ranides.assira.generic.HashUtils;
|
|
|
@@ -90,7 +90,7 @@ public class ResolveFormatTest {
|
|
|
assertEquals("-150_456.5", ResolveFormat.compile("{fvalue,number,java}").format(ITEM) );
|
|
|
assertEquals("-150'456.5", ResolveFormat.compile("{fvalue,number,c++}").format(ITEM) );
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@Test
|
|
|
public void testParse_Errors() {
|
|
|
Integer[] out= new Integer[3];
|
|
|
@@ -108,8 +108,7 @@ public class ResolveFormatTest {
|
|
|
@Test
|
|
|
public void testParse_Number() {
|
|
|
Integer[] out= new Integer[3];
|
|
|
- ResolveFormat rf = ResolveFormat.compile("{0,number} / {1,number,java} / {2,number,java}");
|
|
|
- rf.parse("12 / 33 / 55_100", out);
|
|
|
+ ResolveFormat.compile("{0,number} / {1,number,java} / {2,number,java}").parse("12 / 33 / 55_100", out);
|
|
|
assertArrayEquals(new Integer[]{12,33,55100}, out);
|
|
|
|
|
|
Double[] out2= new Double[3];
|
|
|
@@ -230,12 +229,30 @@ public class ResolveFormatTest {
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void testHexArray() {
|
|
|
+ public void testFormat_HexArray() {
|
|
|
assertEquals("hex = [4]{7A,0x31,0x45,0xAC}", ResolveFormat.compile("hex = {data1,hex}").format(ITEM) );
|
|
|
assertEquals("hex = [4]{7A,0x31,0x45,0xAC}", ResolveFormat.compile("hex = {data1,hex,array}").format(ITEM) );
|
|
|
assertEquals("hex = 7A 31 45 AC", ResolveFormat.compile("hex = {data1,hex,stream}").format(ITEM) );
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testParse_HexArray() {
|
|
|
+ BData out1 = new BData();
|
|
|
+ ResolveFormat.compile("array = {value,hex,array}x").parse("array = [3]{0x10,0x3C,0x3A}x", out1);
|
|
|
+ assertArrayEquals(new byte[]{0x10,0x3C,0x3A}, out1.value);
|
|
|
+
|
|
|
+ BData out2 = new BData();
|
|
|
+ ResolveFormat.compile("array = {value,hex,stream}B").parse("array = 10 3C 3AB", out2);
|
|
|
+ assertArrayEquals(new byte[]{0x10,0x3C,0x3A}, out2.value);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testParse_Generic() {
|
|
|
+ String out[] = new String[3];
|
|
|
+ ResolveFormat.compile("{0} / {1} / last = {2}.").parse("hello / world / last = 23.", out);
|
|
|
+ assertArrayEquals(new String[]{"hello","world","23"}, out);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testFormat_Metric_Int() {
|
|
|
assertEquals("-154.27k", ResolveFormat.compile("{ivalue,metric}").format(ITEM));
|
|
|
@@ -291,6 +308,61 @@ public class ResolveFormatTest {
|
|
|
assertEquals("-154.200E3", ResolveFormat.compile("{bivalue,metric/e,#.000}").format(ITEM));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testParse_MetricSI() {
|
|
|
+ NumData out = new NumData();
|
|
|
+ ResolveFormat.compile("{iv,metric/si}!").parse("12k!", out);
|
|
|
+ assertEquals(12000, out.iv);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{iv,metric/si}!").parse("12!", out);
|
|
|
+ assertEquals(12, out.iv);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{dv,metric/si}!").parse("12.5M!", out);
|
|
|
+ assertEquals(12500000.0, out.dv, 0.1);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{dv,metric/si}!").parse("12.5372!", out);
|
|
|
+ assertEquals(12.5372, out.dv, 0.00001);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bd,metric/si}!").parse("125k!", out);
|
|
|
+ assertTrue(0 == new BigDecimal("125000").compareTo(out.bd));
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bd,metric/si}!").parse("12.5372!", out);
|
|
|
+ assertTrue(0 == new BigDecimal("12.5372").compareTo(out.bd));
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bi,metric/si}!").parse("127k!", out);
|
|
|
+ assertTrue(0 == new BigInteger("127000").compareTo(out.bi));
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bi,metric/si}!").parse("19!", out);
|
|
|
+ assertTrue(0 == new BigInteger("19").compareTo(out.bi));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testParse_MetricBinaryIEC() {
|
|
|
+ NumData out = new NumData();
|
|
|
+ ResolveFormat.compile("{iv,binary/iec}!").parse("12Ki!", out);
|
|
|
+ assertEquals(12*1024, out.iv);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{iv,binary/iec}!").parse("12!", out);
|
|
|
+ assertEquals(12, out.iv);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{dv,binary/iec}!").parse("12.5Mi!", out);
|
|
|
+ assertEquals(12.5*1024.0*1024.0, out.dv, 0.1);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{dv,binary/iec}!").parse("12.5372!", out);
|
|
|
+ assertEquals(12.5372, out.dv, 0.00001);
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bd,binary/iec}!").parse("125Ki!", out);
|
|
|
+ assertTrue(0 == new BigDecimal("128000").compareTo(out.bd));
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bd,binary/iec}!").parse("12.5372!", out);
|
|
|
+ assertTrue(0 == new BigDecimal("12.5372").compareTo(out.bd));
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bi,binary/iec}!").parse("127Ki!", out);
|
|
|
+ assertTrue(0 == new BigInteger("130048").compareTo(out.bi));
|
|
|
+
|
|
|
+ ResolveFormat.compile("{bi,binary/iec}!").parse("19!", out);
|
|
|
+ assertTrue(0 == new BigInteger("19").compareTo(out.bi));
|
|
|
+ }
|
|
|
|
|
|
@Test
|
|
|
public void testFormat_Binary_Int() {
|
|
|
@@ -441,12 +513,6 @@ public class ResolveFormatTest {
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- // @todo (assira #0) test: ResolveFormat# parse FHexArray
|
|
|
- // @todo (assira #0) test: ResolveFormat# parse FHexStream
|
|
|
- // @todo (assira #0) test: ResolveFormat# parse FEngineer
|
|
|
- // @todo (assira #0) test: ResolveFormat# parse FGeneric
|
|
|
-
|
|
|
private static final Object ITEM = new Object(){
|
|
|
|
|
|
public float value1 = 3.1415f;
|
|
|
@@ -470,5 +536,25 @@ public class ResolveFormatTest {
|
|
|
public BigInteger value128 = new BigInteger("-1542000000000000000000000");
|
|
|
|
|
|
};
|
|
|
+
|
|
|
+ private static final class BData {
|
|
|
+
|
|
|
+ public byte[] value;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private static final class NumData {
|
|
|
+
|
|
|
+ public BigDecimal bd;
|
|
|
+
|
|
|
+ public BigInteger bi;
|
|
|
+
|
|
|
+ public AtomicInteger ai;
|
|
|
+
|
|
|
+ public double dv;
|
|
|
+
|
|
|
+ public long iv;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|