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());

Reply via email to