From c428060a3001d3198fcb8b88f874150c69f1b7c2 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Thu, 12 Dec 2019 00:20:04 +0000 Subject: [PATCH] further code moved to jwo --- .../serialization/json/PerformanceTest.java | 16 +- .../net/woggioni/worth/benchmark/Main.java | 16 +- .../serialization/binary/JBONDumper.java | 2 +- .../serialization/binary/JBONParser.java | 3 +- .../net/woggioni/worth/utils/Chronometer.java | 34 --- .../java/net/woggioni/worth/utils/Leb128.java | 76 ------ .../net/woggioni/worth/utils/ListView.java | 249 ------------------ .../java/net/woggioni/worth/utils/Tuple2.java | 11 - .../worth/traversal/ValueWalkerTest.java | 2 +- .../net/woggioni/worth/utils/Leb128Test.java | 62 ----- .../java/net/woggioni/worth/utils/Tuple2.java | 26 -- .../value/ObjectValueImplementationTest.java | 2 +- 12 files changed, 20 insertions(+), 479 deletions(-) delete mode 100644 src/main/java/net/woggioni/worth/utils/Chronometer.java delete mode 100644 src/main/java/net/woggioni/worth/utils/Leb128.java delete mode 100644 src/main/java/net/woggioni/worth/utils/ListView.java delete mode 100644 src/main/java/net/woggioni/worth/utils/Tuple2.java delete mode 100644 src/test/java/net/woggioni/worth/utils/Leb128Test.java delete mode 100644 src/test/java/net/woggioni/worth/utils/Tuple2.java diff --git a/antlr/src/test/java/net/woggioni/worth/serialization/json/PerformanceTest.java b/antlr/src/test/java/net/woggioni/worth/serialization/json/PerformanceTest.java index 533abb9..725b5a9 100644 --- a/antlr/src/test/java/net/woggioni/worth/serialization/json/PerformanceTest.java +++ b/antlr/src/test/java/net/woggioni/worth/serialization/json/PerformanceTest.java @@ -3,11 +3,11 @@ package net.woggioni.worth.serialization.json; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; +import net.woggioni.jwo.Chronometer; import net.woggioni.worth.antlr.JSONLexer; import net.woggioni.worth.antlr.JSONListenerImpl; import net.woggioni.worth.serialization.binary.JBONDumper; import net.woggioni.worth.serialization.binary.JBONParser; -import net.woggioni.worth.utils.Chronometer; import net.woggioni.worth.value.ObjectValue; import net.woggioni.worth.xface.Dumper; import net.woggioni.worth.xface.Parser; @@ -66,7 +66,7 @@ public class PerformanceTest { JsonNode jsonNode = om.readTree(smallTestData()); } } - jacksonTime = chr.stop(Chronometer.TimeUnit.MILLISECOND); + jacksonTime = chr.elapsed(Chronometer.UnitOfMeasure.MILLISECONDS); System.out.printf("Jackson time: %8s msec\n", String.format("%.3f", jacksonTime)); } { @@ -76,7 +76,7 @@ public class PerformanceTest { Value value = new JSONParser().parse(smallTestData()); } } - worthTime = chr.stop(Chronometer.TimeUnit.MILLISECOND); + worthTime = chr.elapsed(Chronometer.UnitOfMeasure.MILLISECONDS); System.out.printf("Worth time: %8s msec\n", String.format("%.3f", worthTime)); } { @@ -92,7 +92,7 @@ public class PerformanceTest { walker.walk(listener, parser.json()); } } - antlrTime = chr.stop(Chronometer.TimeUnit.MILLISECOND); + antlrTime = chr.elapsed(Chronometer.UnitOfMeasure.MILLISECONDS); System.out.printf("Antlr time: %8s msec\n", String.format("%.3f", antlrTime)); } } @@ -110,20 +110,20 @@ public class PerformanceTest { chr.reset(); ObjectMapper om = new ObjectMapper(); om.readTree(is); - jacksonTime = chr.stop(Chronometer.TimeUnit.SECOND); + jacksonTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Jackson time: %8s sec\n", String.format("%.3f", jacksonTime)); } try(InputStream is = extractTestData()) { chr.reset(); new JSONParser(cfg).parse(is); - worthTime = chr.stop(Chronometer.TimeUnit.SECOND); + worthTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Worth time: %8s sec\n", String.format("%.3f", worthTime)); } try(InputStream is = extractBinaryTestData()) { chr.reset(); new JBONParser(cfg).parse(is); - worthTime = chr.stop(Chronometer.TimeUnit.SECOND); + worthTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Worth time binary: %8s sec\n", String.format("%.3f", worthTime)); } @@ -136,7 +136,7 @@ public class PerformanceTest { JSONListenerImpl listener = new JSONListenerImpl(); ParseTreeWalker walker = new ParseTreeWalker(); walker.walk(listener, parser.json()); - antlrTime = chr.stop(Chronometer.TimeUnit.SECOND); + antlrTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Antlr time: %8s sec\n", String.format("%.3f", antlrTime)); } } diff --git a/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java b/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java index 02644e6..30e6f88 100644 --- a/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java +++ b/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java @@ -7,7 +7,7 @@ import net.woggioni.worth.antlr.JSONLexer; import net.woggioni.worth.antlr.JSONListenerImpl; import net.woggioni.worth.serialization.binary.JBONParser; import net.woggioni.worth.serialization.json.JSONParser; -import net.woggioni.worth.utils.Chronometer; +import net.woggioni.jwo.Chronometer; import net.woggioni.worth.value.ObjectValue; import net.woggioni.worth.xface.Value; import org.antlr.v4.runtime.CharStream; @@ -57,7 +57,7 @@ public class Main { JsonNode jsonNode = om.readTree(smallTestData()); } } - jacksonTime = chr.stop(Chronometer.TimeUnit.MILLISECOND); + jacksonTime = chr.elapsed(Chronometer.UnitOfMeasure.MILLISECONDS); System.out.printf("Jackson time: %8s msec\n", String.format("%.3f", jacksonTime)); } { @@ -67,7 +67,7 @@ public class Main { Value value = new JSONParser().parse(new BufferedReader(new InputStreamReader(smallTestData()))); } } - worthTime = chr.stop(Chronometer.TimeUnit.MILLISECOND); + worthTime = chr.elapsed(Chronometer.UnitOfMeasure.MILLISECONDS); System.out.printf("Worth time: %8s msec\n", String.format("%.3f", worthTime)); } { @@ -83,7 +83,7 @@ public class Main { walker.walk(listener, parser.json()); } } - antlrTime = chr.stop(Chronometer.TimeUnit.MILLISECOND); + antlrTime = chr.elapsed(Chronometer.UnitOfMeasure.MILLISECONDS); System.out.printf("Antlr time: %8s msec\n", String.format("%.3f", antlrTime)); } } @@ -101,7 +101,7 @@ public class Main { chr.reset(); ObjectMapper om = new ObjectMapper(); om.readTree(new InputStreamReader(is)); - double elapsedTime = chr.stop(Chronometer.TimeUnit.SECOND); + double elapsedTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Jackson time: %8s sec\n", String.format("%.3f", elapsedTime)); } } @@ -112,7 +112,7 @@ public class Main { try (InputStream is = extractTestData()) { chr.reset(); new JSONParser(buildConfiguration()).parse(is); - double elapsedTime = chr.stop(Chronometer.TimeUnit.SECOND); + double elapsedTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Worth json time: %8s sec\n", String.format("%.3f", elapsedTime)); } } @@ -123,7 +123,7 @@ public class Main { try (InputStream is = extractBinaryTestData()) { chr.reset(); new JBONParser(buildConfiguration()).parse(is); - double elapsedTime = chr.stop(Chronometer.TimeUnit.SECOND); + double elapsedTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Worth jbon time: %8s sec\n", String.format("%.3f", elapsedTime)); } } @@ -140,7 +140,7 @@ public class Main { JSONListenerImpl listener = new JSONListenerImpl(); ParseTreeWalker walker = new ParseTreeWalker(); walker.walk(listener, parser.json()); - double elapsedTime = chr.stop(Chronometer.TimeUnit.SECOND); + double elapsedTime = chr.elapsed(Chronometer.UnitOfMeasure.SECONDS); System.out.printf("Antlr time: %8s sec\n", String.format("%.3f", elapsedTime)); } } diff --git a/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java b/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java index a4fa471..1fd99b3 100644 --- a/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java +++ b/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java @@ -1,10 +1,10 @@ package net.woggioni.worth.serialization.binary; import lombok.SneakyThrows; +import net.woggioni.jwo.Leb128; import net.woggioni.worth.exception.NotImplementedException; import net.woggioni.worth.serialization.ValueDumper; import net.woggioni.worth.traversal.ValueIdentity; -import net.woggioni.worth.utils.Leb128; import net.woggioni.worth.value.ArrayValue; import net.woggioni.worth.value.ObjectValue; import net.woggioni.worth.xface.Dumper; diff --git a/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java b/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java index 3ed9677..a5779b1 100644 --- a/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java +++ b/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java @@ -1,11 +1,10 @@ package net.woggioni.worth.serialization.binary; import lombok.SneakyThrows; +import net.woggioni.jwo.Leb128; import net.woggioni.worth.buffer.LookAheadInputStream; import net.woggioni.worth.exception.ParseException; import net.woggioni.worth.serialization.ValueParser; -import net.woggioni.worth.utils.Leb128; -import net.woggioni.worth.utils.WorthUtils; import net.woggioni.worth.xface.Parser; import net.woggioni.worth.xface.Value; diff --git a/src/main/java/net/woggioni/worth/utils/Chronometer.java b/src/main/java/net/woggioni/worth/utils/Chronometer.java deleted file mode 100644 index 30607d2..0000000 --- a/src/main/java/net/woggioni/worth/utils/Chronometer.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.woggioni.worth.utils; - -public class Chronometer { - - public enum TimeUnit { - NANOSECOND(1e-9), MICROSECOND(1e-6), MILLISECOND(1e-3), SECOND(1); - - private double factor; - - TimeUnit(double factor) { - this.factor = factor; - } - } - - private long start = System.nanoTime(); - - public void start() { - start = System.nanoTime(); - } - - public void reset() { - start(); - } - - public double stop(TimeUnit unit) { - return (System.nanoTime() - start) / (1e9 * unit.factor); - } - - public double stop() { - return stop(TimeUnit.MILLISECOND); - } - -} - diff --git a/src/main/java/net/woggioni/worth/utils/Leb128.java b/src/main/java/net/woggioni/worth/utils/Leb128.java deleted file mode 100644 index 793e838..0000000 --- a/src/main/java/net/woggioni/worth/utils/Leb128.java +++ /dev/null @@ -1,76 +0,0 @@ -package net.woggioni.worth.utils; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; - -import java.io.InputStream; -import java.io.OutputStream; - -public class Leb128 { - - public static long reverse(long n) { - long res = 0; - for(int i = 0; i < 8; i++) { - long b = (n & (0xFFL << (i * 8))) >>> (i * 8); - res |= b << ((7 - i) * 8); - } - return res; - } - - public static int encode(OutputStream os, double input) { - return encode(os, reverse(Double.doubleToLongBits(input))); - } - - @SneakyThrows - public static int encode(OutputStream os, long input) { - int bytes_written = 0; - long number = input >= 0 ? (input << 1) : (-(input + 1)) << 1 | 1; - while((number & 127L) != number) { - os.write((int) (number & 127) | 128); - bytes_written++; - number >>>= 7; - } - os.write((int) number); - return ++bytes_written; - } - - @RequiredArgsConstructor - public static class Leb128Decoder { - @Getter - private int bytesRead = 0; - - private final InputStream is; - - public byte decodeByte() { - return (byte) decode(); - } - - public short decodeShort() { - return (short) decode(); - } - - public int decodeInt() { - return (int) decode(); - } - - public double decodeDouble() { - return Double.longBitsToDouble(reverse(decode())); - } - - @SneakyThrows - public long decode() { - long res = 0; - for(int i = 0; i < (8 * 8 + 6) / 7; i++) { - int c = is.read(); - bytesRead++; - if(c < 0) { - throw new IllegalArgumentException("Unexpected end of file"); - } - res |= ((long)(c & 127)) << (i * 7); - if((byte) c >= 0) break; - } - return (res & 1) != 0 ? - (res >>> 1) - 1 : (res >>> 1); - } - } -} diff --git a/src/main/java/net/woggioni/worth/utils/ListView.java b/src/main/java/net/woggioni/worth/utils/ListView.java deleted file mode 100644 index 493f1a8..0000000 --- a/src/main/java/net/woggioni/worth/utils/ListView.java +++ /dev/null @@ -1,249 +0,0 @@ -package net.woggioni.worth.utils; - -import lombok.RequiredArgsConstructor; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.Objects; - -import static java.lang.Math.min; - -@RequiredArgsConstructor -public class ListView implements List { - private final List delegate; - private final int start; - private final int end; - - public ListView(List delegate, int start) { - this(delegate, start, -1); - } - - @Override - public int size() { - return end < 0 ? delegate.size() : min(end, delegate.size()) - start; - } - - @Override - public boolean isEmpty() { - return size() == 0; - } - - @Override - public boolean contains(Object o) { - Iterator it = iterator(); - while (it.hasNext()) { - if(Objects.equals(o, it.next())) { - return true; - } - } - return false; - } - - @Override - public Iterator iterator() { - return new Iterator() { - int index = start; - @Override - public boolean hasNext() { - return end < 0 ? index < size() : index < min(end, size()); - } - - @Override - public T next() { - return get(index++); - } - }; - } - - @Override - public Object[] toArray() { - int size = size(); - Object[] result = new Object[size]; - for(int i = 0; i < size; i++) { - result[i] = get(i); - } - return result; - } - - @Override - public T1[] toArray(T1[] t1s) { - int size = size(); - T1[] result = Arrays.copyOf(t1s, size); - for(int i = 0; i < size; i++) { - result[i] = (T1) get(i); - } - return result; - } - - @Override - public boolean add(T t) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean remove(Object o) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsAll(Collection collection) { - return false; - } - - @Override - public boolean addAll(Collection collection) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean addAll(int i, Collection collection) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean removeAll(Collection collection) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean retainAll(Collection collection) { - throw new UnsupportedOperationException(); - } - - @Override - public void clear() { - throw new UnsupportedOperationException(); - } - - @Override - public T get(int i) { - int index = start + i; - if(end >= 0 && index < end) { - throw new IndexOutOfBoundsException(Integer.toString(i)); - } - return delegate.get(start + i); - } - - @Override - public T set(int i, T t) { - throw new UnsupportedOperationException(); - } - - @Override - public void add(int i, T t) { - throw new UnsupportedOperationException(); - } - - @Override - public T remove(int i) { - throw new UnsupportedOperationException(); - } - - @Override - public int indexOf(Object o) { - int size = size(); - for(int i = 0; i < size; i++) { - if(Objects.equals(o, get(i))) { - return i; - } - } - return -1; - } - - @Override - public int lastIndexOf(Object o) { - int size = size(); - for(int i = size - 1; i >= 0; i--) { - if(Objects.equals(o, get(i))) { - return i; - } - } - return -1; - } - - @Override - public ListIterator listIterator() { - return new ListViewIterator<>(this, 0); - } - - @Override - public ListIterator listIterator(int i) { - if(i < 0 || i > size()) { - throw new IndexOutOfBoundsException(Integer.toString(0)); - } else { - return new ListViewIterator<>(this, start); - } - } - - @Override - public List subList(int i, int i1) { - if(i < 0) { - throw new IndexOutOfBoundsException(Integer.toString(0)); - } else if(i1 > size()) { - throw new IndexOutOfBoundsException(Integer.toString(i1)); - } else { - return new ListView<>(delegate, start + i, start + i1); - } - } - - @RequiredArgsConstructor - private static class ListViewIterator implements ListIterator { - private final ListView listView; - int size; - int i; - - public ListViewIterator(ListView listView, int start) { - this.listView = listView; - size = listView.size(); - i = start; - } - - @Override - public boolean hasNext() { - return i < size; - } - - @Override - public T next() { - return listView.get(i++); - } - - @Override - public boolean hasPrevious() { - return i > 0; - } - - @Override - public T previous() { - return listView.get(--i); - } - - @Override - public int nextIndex() { - return i + 1; - } - - @Override - public int previousIndex() { - return i; - } - - @Override - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public void set(T t) { - throw new UnsupportedOperationException(); - } - - @Override - public void add(T t) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/src/main/java/net/woggioni/worth/utils/Tuple2.java b/src/main/java/net/woggioni/worth/utils/Tuple2.java deleted file mode 100644 index 3fa3dc5..0000000 --- a/src/main/java/net/woggioni/worth/utils/Tuple2.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.woggioni.worth.utils; - -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; - -@EqualsAndHashCode -@RequiredArgsConstructor -public class Tuple2 { - public final T _1; - public final U _2; -} diff --git a/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java b/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java index f2251ce..3dd597f 100644 --- a/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java +++ b/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java @@ -4,7 +4,7 @@ import lombok.SneakyThrows; import net.woggioni.jwo.JWO; import net.woggioni.worth.serialization.json.JSONParser; import net.woggioni.worth.serialization.json.JSONTest; -import net.woggioni.worth.utils.Tuple2; +import net.woggioni.jwo.tuple.Tuple2; import net.woggioni.worth.value.ArrayValue; import net.woggioni.worth.value.ObjectValue; import net.woggioni.worth.xface.Parser; diff --git a/src/test/java/net/woggioni/worth/utils/Leb128Test.java b/src/test/java/net/woggioni/worth/utils/Leb128Test.java deleted file mode 100644 index d7dd2f3..0000000 --- a/src/test/java/net/woggioni/worth/utils/Leb128Test.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.woggioni.worth.utils; - -import lombok.SneakyThrows; -import org.junit.Assert; -import org.junit.Test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class Leb128Test { - - @Test - public void testLong() { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - List numbers = Arrays.asList(0L, 1L, -3L, 5L, 7L, 8L, 125L, 255L, 10325L, -2000L, 1024L * 1024L * 1024L * 12L); - - numbers.forEach(n -> Leb128.encode(baos, n)); - - byte[] bytes = baos.toByteArray(); - - Leb128.Leb128Decoder decoder = new Leb128.Leb128Decoder(new ByteArrayInputStream(bytes)); - numbers.forEach(n -> Assert.assertEquals((long) n, decoder.decode())); - } - - @Test - public void testDouble() { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - List numbers = Arrays.asList( - 0.0, 1.5, -3.0, 0.5, 2.5, 8.25, -125.0, 255.0, 10325.0, -2000.0, 1024.0 * 1024 * 1024 * 12, - -122.42200352825247, 37.80848009696725); - - numbers.forEach(n -> Leb128.encode(baos, n)); - - byte[] bytes = baos.toByteArray(); - - Leb128.Leb128Decoder decoder = new Leb128.Leb128Decoder(new ByteArrayInputStream(bytes)); - numbers.forEach(n -> Assert.assertEquals(n, decoder.decodeDouble(), 0.0)); - } - - - @Test - public void reverseTest() { - long n = 101325; - Assert.assertEquals(n, Leb128.reverse(Leb128.reverse(n))); - } - - @Test - @SneakyThrows - public void reverseTestDouble() { - double n = 0.25; - long doubleLong = Double.doubleToLongBits(n); - long reverse = Leb128.reverse(doubleLong); - try(ByteArrayOutputStream os = new ByteArrayOutputStream()) { - Leb128.encode(os, reverse); - byte[] bytes = os.toByteArray(); - Assert.assertEquals(3, bytes.length); - } - } -} diff --git a/src/test/java/net/woggioni/worth/utils/Tuple2.java b/src/test/java/net/woggioni/worth/utils/Tuple2.java deleted file mode 100644 index 3b11394..0000000 --- a/src/test/java/net/woggioni/worth/utils/Tuple2.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.woggioni.worth.utils; - -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; - -import java.util.Comparator; - -@EqualsAndHashCode -@RequiredArgsConstructor -public class Tuple2 { - public final T _1; - public final U _2; - - public static , Y extends Comparable> Comparator> getComparator(Tuple2 tuple) { - return Comparator - .comparing((Tuple2 t) -> t._1) - .thenComparing((Tuple2 t) -> t._2); - } - - public static , Y extends Comparable> Comparator> getComparator(Class cls1, Class cls2) { - return Comparator - .comparing((Tuple2 t) -> t._1) - .thenComparing((Tuple2 t) -> t._2); - } - -} diff --git a/src/test/java/net/woggioni/worth/value/ObjectValueImplementationTest.java b/src/test/java/net/woggioni/worth/value/ObjectValueImplementationTest.java index a3e1b18..9ba30eb 100644 --- a/src/test/java/net/woggioni/worth/value/ObjectValueImplementationTest.java +++ b/src/test/java/net/woggioni/worth/value/ObjectValueImplementationTest.java @@ -1,6 +1,6 @@ package net.woggioni.worth.value; -import net.woggioni.worth.utils.Tuple2; +import net.woggioni.jwo.tuple.Tuple2; import net.woggioni.worth.xface.Value; import org.junit.Assert; import org.junit.Test;