This is an automated email from the ASF dual-hosted git repository.
baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new f4ca42684c [MINOR] fix serialized size of String Array
f4ca42684c is described below
commit f4ca42684c88045a4cc71b5918a35bb689827405
Author: baunsgaard <[email protected]>
AuthorDate: Thu Jan 12 09:41:31 2023 +0100
[MINOR] fix serialized size of String Array
I added a minor change to also serialize the materialized size of
StringArray in frames. This did not take into consideration the
serialized size difference of 8 bits.
Closes #1762
---
.../runtime/frame/data/columns/StringArray.java | 2 +-
.../component/frame/array/FrameArrayTests.java | 44 ++++++++++++++++------
2 files changed, 33 insertions(+), 13 deletions(-)
diff --git
a/src/main/java/org/apache/sysds/runtime/frame/data/columns/StringArray.java
b/src/main/java/org/apache/sysds/runtime/frame/data/columns/StringArray.java
index 896225b6f2..254d4f87ec 100644
--- a/src/main/java/org/apache/sysds/runtime/frame/data/columns/StringArray.java
+++ b/src/main/java/org/apache/sysds/runtime/frame/data/columns/StringArray.java
@@ -264,7 +264,7 @@ public class StringArray extends Array<String> {
@Override
public long getExactSerializedSize() {
- long si = 1; // byte identifier
+ long si = 1 + 8; // byte identifier
for(String s : _data)
si += IOUtilFunctions.getUTFSize(s);
return si;
diff --git
a/src/test/java/org/apache/sysds/test/component/frame/array/FrameArrayTests.java
b/src/test/java/org/apache/sysds/test/component/frame/array/FrameArrayTests.java
index 080061302f..6f81a68f4c 100644
---
a/src/test/java/org/apache/sysds/test/component/frame/array/FrameArrayTests.java
+++
b/src/test/java/org/apache/sysds/test/component/frame/array/FrameArrayTests.java
@@ -27,6 +27,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
@@ -442,7 +443,7 @@ public class FrameArrayTests {
case STRING:
String vs = "1324L";
- a.set(0,vs);
+ a.set(0, vs);
assertEquals(((Array<String>) a).get(0), vs);
return;
@@ -584,7 +585,7 @@ public class FrameArrayTests {
@Test
public void setNull() {
// should not crash
- a.set(0, (String)null);
+ a.set(0, (String) null);
}
@Test
@@ -790,17 +791,16 @@ public class FrameArrayTests {
compare(aa, a);
}
-
@Test
@SuppressWarnings("unchecked")
public void testSetNzString() {
Array<?> aa = a.clone();
- Array<String> af =
(Array<String>)aa.changeType(ValueType.STRING);
- try{
+ Array<String> af = (Array<String>)
aa.changeType(ValueType.STRING);
+ try {
aa.setFromOtherTypeNz(af);
}
- catch(Exception e){
+ catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
@@ -812,12 +812,12 @@ public class FrameArrayTests {
@SuppressWarnings("unchecked")
public void testSetFromString() {
Array<?> aa = a.clone();
- Array<String> af =
(Array<String>)aa.changeType(ValueType.STRING);
- try{
+ Array<String> af = (Array<String>)
aa.changeType(ValueType.STRING);
+ try {
- aa.setFromOtherType(0, af.size()-1, af);
+ aa.setFromOtherType(0, af.size() - 1, af);
}
- catch(Exception e){
+ catch(Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
@@ -829,12 +829,12 @@ public class FrameArrayTests {
public void resetTestCase() {
Array<?> aa = a.clone();
aa.reset(10);
- if(aa.getValueType() == ValueType.STRING){
+ if(aa.getValueType() == ValueType.STRING) {
for(int i = 0; i < 10; i++) {
assertEquals(null, aa.get(i));
}
}
- else{
+ else {
String v = aa.get(0).toString();
for(int i = 1; i < 10; i++) {
@@ -843,6 +843,26 @@ public class FrameArrayTests {
}
}
+ @Test
+ public void testSerializationSize() {
+ try {
+ // Serialize out
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ DataOutputStream fos = new DataOutputStream(bos);
+ a.write(fos);
+ long s = (long) fos.size();
+ long e = a.getExactSerializedSize();
+ assertEquals(s, e);
+ }
+ catch(IOException e) {
+ throw new RuntimeException("Error in io", e);
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
protected static void compare(Array<?> a, Array<?> b) {
int size = a.size();
assertTrue(a.size() == b.size());