You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by sj...@apache.org on 2016/05/26 17:39:55 UTC
[38/50] [abbrv] vxquery git commit: Unit tests for the sequence data
model: pointable and builder classes.
Unit tests for the sequence data model: pointable and builder classes.
* Includes changes for IBuilder interface to improve the code reuse and standardization.
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/7d7ab007
Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/7d7ab007
Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/7d7ab007
Branch: refs/heads/site
Commit: 7d7ab007efc874f2612f976c88fb09387efb0155
Parents: 0891910
Author: Preston Carman <pr...@apache.org>
Authored: Mon May 16 17:32:50 2016 -0700
Committer: Preston Carman <pr...@apache.org>
Committed: Mon May 16 17:32:50 2016 -0700
----------------------------------------------------------------------
.../builders/atomic/UTF8StringBuilder.java | 9 +-
.../builders/base/AbstractBuilder.java | 14 +-
.../datamodel/builders/base/IBuilder.java | 27 ++++
.../builders/nodes/AbstractNodeBuilder.java | 8 +-
.../builders/nodes/AttributeNodeBuilder.java | 12 +-
.../builders/nodes/CommentNodeBuilder.java | 11 +-
.../builders/nodes/DocumentNodeBuilder.java | 12 +-
.../builders/nodes/ElementNodeBuilder.java | 17 ++-
.../builders/nodes/NodeSubTreeBuilder.java | 17 +--
.../datamodel/builders/nodes/PINodeBuilder.java | 11 +-
.../builders/nodes/TextNodeBuilder.java | 11 +-
.../builders/sequence/SequenceBuilder.java | 11 +-
.../comparison/ValueEqComparisonOperation.java | 128 ++++++++--------
.../runtime/functions/util/FunctionHelper.java | 20 ++-
.../datamodel/AbstractPointableTest.java | 56 +++++++
.../vxquery/datamodel/SequenceByteTest.java | 147 +++++++++++++++++++
16 files changed, 358 insertions(+), 153 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/atomic/UTF8StringBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/atomic/UTF8StringBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/atomic/UTF8StringBuilder.java
index 51c026b..a4d301d 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/atomic/UTF8StringBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/atomic/UTF8StringBuilder.java
@@ -20,17 +20,15 @@ import java.io.DataOutput;
import java.io.IOException;
import java.io.UTFDataFormatException;
-import org.apache.vxquery.datamodel.builders.base.AbstractBuilder;
-import org.apache.vxquery.runtime.functions.util.FunctionHelper;
-
import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.primitive.BytePointable;
+import org.apache.vxquery.datamodel.builders.base.IBuilder;
+import org.apache.vxquery.runtime.functions.util.FunctionHelper;
-public class UTF8StringBuilder extends AbstractBuilder {
+public class UTF8StringBuilder implements IBuilder {
private IMutableValueStorage mvs;
private DataOutput out;
- @Override
public void reset(IMutableValueStorage mvs) throws IOException {
this.mvs = mvs;
out = mvs.getDataOutput();
@@ -38,7 +36,6 @@ public class UTF8StringBuilder extends AbstractBuilder {
out.write(0);
}
- @Override
public void finish() throws IOException {
int utflen = mvs.getLength() - 2;
BytePointable.setByte(mvs.getByteArray(), 0, (byte) ((utflen >>> 8) & 0xFF));
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/AbstractBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/AbstractBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/AbstractBuilder.java
index bacad26..c360eed 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/AbstractBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/AbstractBuilder.java
@@ -16,12 +16,20 @@
*/
package org.apache.vxquery.datamodel.builders.base;
+import java.io.DataOutput;
import java.io.IOException;
import org.apache.hyracks.data.std.api.IMutableValueStorage;
-public abstract class AbstractBuilder {
- public abstract void reset(IMutableValueStorage mvs) throws IOException;
+public abstract class AbstractBuilder implements IBuilder {
+
+ protected DataOutput out;
+
+ public void reset(IMutableValueStorage mvs) throws IOException {
+ out = mvs.getDataOutput();
+ out.write(getValueTag());
+ }
+
+ public abstract int getValueTag();
- public abstract void finish() throws IOException;
}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/IBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/IBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/IBuilder.java
new file mode 100644
index 0000000..49df178
--- /dev/null
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/base/IBuilder.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.vxquery.datamodel.builders.base;
+
+import java.io.IOException;
+
+import org.apache.hyracks.data.std.api.IMutableValueStorage;
+
+public interface IBuilder {
+ public abstract void reset(IMutableValueStorage mvs) throws IOException;
+
+ public abstract void finish() throws IOException;
+}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java
index 955668f..eefa834 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java
@@ -16,12 +16,8 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.IOException;
+import org.apache.vxquery.datamodel.builders.base.AbstractBuilder;
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
+public abstract class AbstractNodeBuilder extends AbstractBuilder {
-public abstract class AbstractNodeBuilder {
- public abstract void reset(IMutableValueStorage mvs) throws IOException;
-
- public abstract void finish() throws IOException;
}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java
index 7743cd8..6d7e0f5 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java
@@ -16,21 +16,16 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
-import org.apache.vxquery.datamodel.values.ValueTag;
-
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.vxquery.datamodel.values.ValueTag;
public class AttributeNodeBuilder extends AbstractNodeBuilder {
- private DataOutput out;
@Override
- public void reset(IMutableValueStorage mvs) throws IOException {
- out = mvs.getDataOutput();
- out.write(ValueTag.ATTRIBUTE_NODE_TAG);
+ public int getValueTag() {
+ return ValueTag.ATTRIBUTE_NODE_TAG;
}
@Override
@@ -56,4 +51,5 @@ public class AttributeNodeBuilder extends AbstractNodeBuilder {
public void setValue(IValueReference value) throws IOException {
out.write(value.getByteArray(), value.getStartOffset(), value.getLength());
}
+
}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java
index d79bb88..d596c3d 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java
@@ -16,21 +16,16 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
-import org.apache.vxquery.datamodel.values.ValueTag;
-
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.vxquery.datamodel.values.ValueTag;
public class CommentNodeBuilder extends AbstractNodeBuilder {
- private DataOutput out;
@Override
- public void reset(IMutableValueStorage mvs) throws IOException {
- out = mvs.getDataOutput();
- out.write(ValueTag.COMMENT_NODE_TAG);
+ public int getValueTag() {
+ return ValueTag.COMMENT_NODE_TAG;
}
@Override
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java
index 47c811c..be2cb93 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java
@@ -16,22 +16,17 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.vxquery.datamodel.values.ValueTag;
import org.apache.vxquery.util.GrowableIntArray;
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-
public class DocumentNodeBuilder extends AbstractNodeBuilder {
private final GrowableIntArray childrenSlots;
private final ArrayBackedValueStorage childrenDataArea;
- private DataOutput out;
-
private int childrenCount;
public DocumentNodeBuilder() {
@@ -40,9 +35,8 @@ public class DocumentNodeBuilder extends AbstractNodeBuilder {
}
@Override
- public void reset(IMutableValueStorage mvs) throws IOException {
- out = mvs.getDataOutput();
- out.write(ValueTag.DOCUMENT_NODE_TAG);
+ public int getValueTag() {
+ return ValueTag.DOCUMENT_NODE_TAG;
}
@Override
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java
index 89aaddc..dcb4b79 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java
@@ -16,18 +16,16 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
-import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable;
-import org.apache.vxquery.datamodel.values.ValueTag;
-import org.apache.vxquery.util.GrowableIntArray;
-
import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.api.IValueReference;
import org.apache.hyracks.data.std.primitive.BytePointable;
import org.apache.hyracks.data.std.primitive.IntegerPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.util.GrowableIntArray;
public class ElementNodeBuilder extends AbstractNodeBuilder {
private final GrowableIntArray attrSlots;
@@ -40,8 +38,6 @@ public class ElementNodeBuilder extends AbstractNodeBuilder {
private IMutableValueStorage mvs;
- private DataOutput out;
-
private int headerOffset;
private int nsChunkStart;
@@ -60,10 +56,15 @@ public class ElementNodeBuilder extends AbstractNodeBuilder {
}
@Override
+ public int getValueTag() {
+ return ValueTag.ELEMENT_NODE_TAG;
+ }
+
+ @Override
public void reset(IMutableValueStorage mvs) throws IOException {
this.mvs = mvs;
out = mvs.getDataOutput();
- out.write(ValueTag.ELEMENT_NODE_TAG);
+ out.write(getValueTag());
headerOffset = mvs.getLength();
out.write(0);
}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/NodeSubTreeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/NodeSubTreeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/NodeSubTreeBuilder.java
index 5eb08df..a746492 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/NodeSubTreeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/NodeSubTreeBuilder.java
@@ -16,22 +16,17 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable;
import org.apache.vxquery.datamodel.values.ValueTag;
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
-
public class NodeSubTreeBuilder extends AbstractNodeBuilder {
- private DataOutput mainOut;
@Override
- public void reset(IMutableValueStorage mvs) throws IOException {
- mainOut = mvs.getDataOutput();
- mainOut.write(ValueTag.NODE_TREE_TAG);
+ public int getValueTag() {
+ return ValueTag.NODE_TREE_TAG;
}
@Override
@@ -46,14 +41,14 @@ public class NodeSubTreeBuilder extends AbstractNodeBuilder {
if (hasNodeIds) {
header |= NodeTreePointable.HEADER_NODEID_EXISTS_MASK;
}
- mainOut.write(header);
+ out.write(header);
if (hasNodeIds) {
- mainOut.writeInt(ntp.getRootNodeId());
+ out.writeInt(ntp.getRootNodeId());
}
if (hasDictionary) {
- mainOut.write(ntp.getByteArray(), ntp.getDictionaryOffset(), ntp.getDictionarySize());
+ out.write(ntp.getByteArray(), ntp.getDictionaryOffset(), ntp.getDictionarySize());
}
- mainOut.write(itemTvp.getByteArray(), itemTvp.getStartOffset(), itemTvp.getLength());
+ out.write(itemTvp.getByteArray(), itemTvp.getStartOffset(), itemTvp.getLength());
}
private boolean hasDictionary(byte tag) {
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java
index ee37511..0e62762 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java
@@ -16,21 +16,16 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
-import org.apache.vxquery.datamodel.values.ValueTag;
-
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.vxquery.datamodel.values.ValueTag;
public class PINodeBuilder extends AbstractNodeBuilder {
- private DataOutput out;
@Override
- public void reset(IMutableValueStorage mvs) throws IOException {
- out = mvs.getDataOutput();
- out.write(ValueTag.PI_NODE_TAG);
+ public int getValueTag() {
+ return ValueTag.PI_NODE_TAG;
}
@Override
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java
index 84ee20e..67aa487 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java
@@ -16,21 +16,16 @@
*/
package org.apache.vxquery.datamodel.builders.nodes;
-import java.io.DataOutput;
import java.io.IOException;
-import org.apache.vxquery.datamodel.values.ValueTag;
-
-import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.vxquery.datamodel.values.ValueTag;
public class TextNodeBuilder extends AbstractNodeBuilder {
- private DataOutput out;
@Override
- public void reset(IMutableValueStorage mvs) throws IOException {
- out = mvs.getDataOutput();
- out.write(ValueTag.TEXT_NODE_TAG);
+ public int getValueTag() {
+ return ValueTag.TEXT_NODE_TAG;
}
@Override
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java
index 12f4ad7..fbea148 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java
@@ -19,21 +19,18 @@ package org.apache.vxquery.datamodel.builders.sequence;
import java.io.DataOutput;
import java.io.IOException;
-import org.apache.vxquery.datamodel.values.ValueTag;
-import org.apache.vxquery.util.GrowableIntArray;
-
import org.apache.hyracks.data.std.api.IMutableValueStorage;
import org.apache.hyracks.data.std.api.IValueReference;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.vxquery.datamodel.builders.base.IBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.util.GrowableIntArray;
-public class SequenceBuilder {
+public class SequenceBuilder implements IBuilder {
private final GrowableIntArray slots = new GrowableIntArray();
private final ArrayBackedValueStorage dataArea = new ArrayBackedValueStorage();
private IMutableValueStorage mvs;
- public SequenceBuilder() {
- }
-
public void reset(IMutableValueStorage mvs) {
this.mvs = mvs;
slots.clear();
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
index f4eb340..fd7bc31 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
@@ -29,7 +29,7 @@ import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable;
import org.apache.vxquery.datamodel.util.DateTime;
import org.apache.vxquery.exceptions.SystemException;
-
+import org.apache.vxquery.runtime.functions.util.FunctionHelper;
import org.apache.hyracks.data.std.primitive.BooleanPointable;
import org.apache.hyracks.data.std.primitive.DoublePointable;
import org.apache.hyracks.data.std.primitive.FloatPointable;
@@ -52,13 +52,12 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
@Override
public boolean operateBase64BinaryBase64Binary(XSBinaryPointable binaryp1, XSBinaryPointable binaryp2)
throws SystemException, IOException {
- return arraysEqual(binaryp1.getByteArray(), binaryp1.getStartOffset(), binaryp1.getLength(),
- binaryp2.getByteArray(), binaryp2.getStartOffset(), binaryp2.getLength());
+ return FunctionHelper.arraysEqual(binaryp1, binaryp2);
}
@Override
- public boolean operateBooleanBoolean(BooleanPointable boolp1, BooleanPointable boolp2) throws SystemException,
- IOException {
+ public boolean operateBooleanBoolean(BooleanPointable boolp1, BooleanPointable boolp2)
+ throws SystemException, IOException {
return (boolp1.compareTo(boolp2) == 0);
}
@@ -73,8 +72,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
int startOffset2 = startOffset1 + 1 + XSDateTimePointable.TYPE_TRAITS.getFixedLength();
if (XSDateTimePointable.getYearMonth(abvsInner.getByteArray(), startOffset1) == XSDateTimePointable
.getYearMonth(abvsInner.getByteArray(), startOffset2)
- && XSDateTimePointable.getDay(abvsInner.getByteArray(), startOffset1) == XSDateTimePointable.getDay(
- abvsInner.getByteArray(), startOffset2)) {
+ && XSDateTimePointable.getDay(abvsInner.getByteArray(), startOffset1) == XSDateTimePointable
+ .getDay(abvsInner.getByteArray(), startOffset2)) {
return true;
}
return false;
@@ -99,14 +98,14 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDecimalDecimal(XSDecimalPointable decp1, XSDecimalPointable decp2) throws SystemException,
- IOException {
+ public boolean operateDecimalDecimal(XSDecimalPointable decp1, XSDecimalPointable decp2)
+ throws SystemException, IOException {
return (decp1.compareTo(decp2) == 0);
}
@Override
- public boolean operateDecimalDouble(XSDecimalPointable decp1, DoublePointable doublep2) throws SystemException,
- IOException {
+ public boolean operateDecimalDouble(XSDecimalPointable decp1, DoublePointable doublep2)
+ throws SystemException, IOException {
double double1 = decp1.doubleValue();
double double2 = doublep2.doubleValue();
if (Double.isNaN(doublep2.getDouble())) {
@@ -116,8 +115,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDecimalFloat(XSDecimalPointable decp1, FloatPointable floatp2) throws SystemException,
- IOException {
+ public boolean operateDecimalFloat(XSDecimalPointable decp1, FloatPointable floatp2)
+ throws SystemException, IOException {
float float1 = decp1.floatValue();
float float2 = floatp2.floatValue();
if (Float.isNaN(floatp2.getFloat())) {
@@ -127,18 +126,19 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDecimalInteger(XSDecimalPointable decp1, LongPointable longp2) throws SystemException,
- IOException {
+ public boolean operateDecimalInteger(XSDecimalPointable decp1, LongPointable longp2)
+ throws SystemException, IOException {
abvsInner.reset();
XSDecimalPointable decp2 = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable();
- decp2.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
+ decp2.set(abvsInner.getByteArray(), abvsInner.getStartOffset(),
+ XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(longp2.getLong(), (byte) 0);
return (decp1.compareTo(decp2) == 0);
}
@Override
- public boolean operateDoubleDecimal(DoublePointable doublep1, XSDecimalPointable decp2) throws SystemException,
- IOException {
+ public boolean operateDoubleDecimal(DoublePointable doublep1, XSDecimalPointable decp2)
+ throws SystemException, IOException {
double double1 = doublep1.doubleValue();
double double2 = decp2.doubleValue();
if (Double.isNaN(doublep1.getDouble())) {
@@ -148,8 +148,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDoubleDouble(DoublePointable doublep1, DoublePointable doublep2) throws SystemException,
- IOException {
+ public boolean operateDoubleDouble(DoublePointable doublep1, DoublePointable doublep2)
+ throws SystemException, IOException {
if (Double.isNaN(doublep1.getDouble()) || Double.isNaN(doublep2.getDouble())) {
return false;
}
@@ -157,8 +157,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDoubleFloat(DoublePointable doublep1, FloatPointable floatp2) throws SystemException,
- IOException {
+ public boolean operateDoubleFloat(DoublePointable doublep1, FloatPointable floatp2)
+ throws SystemException, IOException {
double double1 = doublep1.doubleValue();
double double2 = floatp2.doubleValue();
if (Double.isNaN(doublep1.getDouble()) || Float.isNaN(floatp2.getFloat())) {
@@ -168,8 +168,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDoubleInteger(DoublePointable doublep1, LongPointable longp2) throws SystemException,
- IOException {
+ public boolean operateDoubleInteger(DoublePointable doublep1, LongPointable longp2)
+ throws SystemException, IOException {
double double1 = doublep1.doubleValue();
double double2 = longp2.doubleValue();
if (Double.isNaN(doublep1.getDouble())) {
@@ -179,8 +179,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDTDurationDTDuration(LongPointable longp1, LongPointable longp2) throws SystemException,
- IOException {
+ public boolean operateDTDurationDTDuration(LongPointable longp1, LongPointable longp2)
+ throws SystemException, IOException {
return (longp1.compareTo(longp2) == 0);
}
@@ -194,8 +194,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateDTDurationYMDuration(LongPointable longp1, IntegerPointable intp2) throws SystemException,
- IOException {
+ public boolean operateDTDurationYMDuration(LongPointable longp1, IntegerPointable intp2)
+ throws SystemException, IOException {
if (longp1.getLong() == 0 && intp2.getInteger() == 0) {
return true;
}
@@ -214,8 +214,7 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
@Override
public boolean operateDurationDuration(XSDurationPointable durationp1, XSDurationPointable durationp2)
throws SystemException, IOException {
- return arraysEqual(durationp1.getByteArray(), durationp1.getStartOffset(), durationp1.getLength(),
- durationp2.getByteArray(), durationp2.getStartOffset(), durationp2.getLength());
+ return FunctionHelper.arraysEqual(durationp1, durationp2);
}
@Override
@@ -228,8 +227,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateFloatDecimal(FloatPointable floatp1, XSDecimalPointable decp2) throws SystemException,
- IOException {
+ public boolean operateFloatDecimal(FloatPointable floatp1, XSDecimalPointable decp2)
+ throws SystemException, IOException {
float float1 = floatp1.floatValue();
float float2 = decp2.floatValue();
if (Float.isNaN(floatp1.getFloat())) {
@@ -239,8 +238,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateFloatDouble(FloatPointable floatp1, DoublePointable doublep2) throws SystemException,
- IOException {
+ public boolean operateFloatDouble(FloatPointable floatp1, DoublePointable doublep2)
+ throws SystemException, IOException {
double double1 = floatp1.doubleValue();
double double2 = doublep2.doubleValue();
if (Float.isNaN(floatp1.getFloat()) || Double.isNaN(double2)) {
@@ -250,8 +249,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateFloatFloat(FloatPointable floatp1, FloatPointable floatp2) throws SystemException,
- IOException {
+ public boolean operateFloatFloat(FloatPointable floatp1, FloatPointable floatp2)
+ throws SystemException, IOException {
if (Float.isNaN(floatp1.getFloat()) || Float.isNaN(floatp2.getFloat())) {
return false;
}
@@ -259,8 +258,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateFloatInteger(FloatPointable floatp1, LongPointable longp2) throws SystemException,
- IOException {
+ public boolean operateFloatInteger(FloatPointable floatp1, LongPointable longp2)
+ throws SystemException, IOException {
float float1 = floatp1.floatValue();
float float2 = longp2.floatValue();
if (Float.isNaN(floatp1.getFloat())) {
@@ -302,23 +301,23 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
@Override
public boolean operateHexBinaryHexBinary(XSBinaryPointable binaryp1, XSBinaryPointable binaryp2)
throws SystemException, IOException {
- return arraysEqual(binaryp1.getByteArray(), binaryp1.getStartOffset(), binaryp1.getLength(),
- binaryp2.getByteArray(), binaryp2.getStartOffset(), binaryp2.getLength());
+ return FunctionHelper.arraysEqual(binaryp1, binaryp2);
}
@Override
- public boolean operateIntegerDecimal(LongPointable longp1, XSDecimalPointable decp2) throws SystemException,
- IOException {
+ public boolean operateIntegerDecimal(LongPointable longp1, XSDecimalPointable decp2)
+ throws SystemException, IOException {
abvsInner.reset();
XSDecimalPointable decp1 = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable();
- decp1.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
+ decp1.set(abvsInner.getByteArray(), abvsInner.getStartOffset(),
+ XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp1.setDecimal(longp1.getLong(), (byte) 0);
return (decp1.compareTo(decp2) == 0);
}
@Override
- public boolean operateIntegerDouble(LongPointable longp1, DoublePointable doublep2) throws SystemException,
- IOException {
+ public boolean operateIntegerDouble(LongPointable longp1, DoublePointable doublep2)
+ throws SystemException, IOException {
double double1 = longp1.doubleValue();
double double2 = doublep2.doubleValue();
if (Double.isNaN(double2)) {
@@ -328,8 +327,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateIntegerFloat(LongPointable longp1, FloatPointable floatp2) throws SystemException,
- IOException {
+ public boolean operateIntegerFloat(LongPointable longp1, FloatPointable floatp2)
+ throws SystemException, IOException {
float float1 = longp1.floatValue();
float float2 = floatp2.floatValue();
if (Float.isNaN(float2)) {
@@ -339,8 +338,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateIntegerInteger(LongPointable longp1, LongPointable longp2) throws SystemException,
- IOException {
+ public boolean operateIntegerInteger(LongPointable longp1, LongPointable longp2)
+ throws SystemException, IOException {
return (longp1.compareTo(longp2) == 0);
}
@@ -351,15 +350,16 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateQNameQName(XSQNamePointable qnamep1, XSQNamePointable qnamep2) throws SystemException,
- IOException {
+ public boolean operateQNameQName(XSQNamePointable qnamep1, XSQNamePointable qnamep2)
+ throws SystemException, IOException {
int startOffsetLocalName1 = qnamep1.getStartOffset() + qnamep1.getUriLength() + qnamep1.getPrefixLength();
int startOffsetLocalName2 = qnamep2.getStartOffset() + qnamep2.getUriLength() + qnamep2.getPrefixLength();
// Only compare URI and LocalName.
- return arraysEqual(qnamep1.getByteArray(), qnamep1.getStartOffset(), qnamep1.getUriLength(),
+ return FunctionHelper.arraysEqual(qnamep1.getByteArray(), qnamep1.getStartOffset(), qnamep1.getUriLength(),
qnamep2.getByteArray(), qnamep2.getStartOffset(), qnamep2.getUriLength())
- && arraysEqual(qnamep1.getByteArray(), startOffsetLocalName1, qnamep1.getLocalNameLength(),
- qnamep2.getByteArray(), startOffsetLocalName2, qnamep2.getLocalNameLength());
+ && FunctionHelper.arraysEqual(qnamep1.getByteArray(), startOffsetLocalName1,
+ qnamep1.getLocalNameLength(), qnamep2.getByteArray(), startOffsetLocalName2,
+ qnamep2.getLocalNameLength());
}
@Override
@@ -387,8 +387,8 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateYMDurationDTDuration(IntegerPointable intp1, LongPointable longp2) throws SystemException,
- IOException {
+ public boolean operateYMDurationDTDuration(IntegerPointable intp1, LongPointable longp2)
+ throws SystemException, IOException {
if (intp1.getInteger() == 0 && longp2.getLong() == 0) {
return true;
}
@@ -405,21 +405,9 @@ public class ValueEqComparisonOperation extends AbstractValueComparisonOperation
}
@Override
- public boolean operateYMDurationYMDuration(IntegerPointable intp1, IntegerPointable intp2) throws SystemException,
- IOException {
+ public boolean operateYMDurationYMDuration(IntegerPointable intp1, IntegerPointable intp2)
+ throws SystemException, IOException {
return (intp1.compareTo(intp2) == 0);
}
- private boolean arraysEqual(byte[] bytes1, int offset1, int length1, byte[] bytes2, int offset2, int length2) {
- if (length1 != length2) {
- return false;
- }
- for (int i = 0; i < length1; ++i) {
- if (bytes1[offset1 + i] != bytes2[offset2 + i]) {
- return false;
- }
- }
- return true;
- }
-
}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
index a57bf72..d8c4e68 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
@@ -456,9 +456,27 @@ public class FunctionHelper {
throw new SystemException(ErrorCode.XPTY0004);
}
+ public static boolean arraysEqual(IPointable p1, IPointable p2) {
+ return arraysEqual(p1.getByteArray(), p1.getStartOffset(), p1.getLength(), p2.getByteArray(),
+ p2.getStartOffset(), p2.getLength());
+ }
+
+ public static boolean arraysEqual(byte[] bytes1, int offset1, int length1, byte[] bytes2, int offset2,
+ int length2) {
+ if (length1 != length2) {
+ return false;
+ }
+ for (int i = 0; i < length1; ++i) {
+ if (bytes1[offset1 + i] != bytes2[offset2 + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public static boolean compareTaggedValues(AbstractValueComparisonOperation aOp, TaggedValuePointable tvp1,
TaggedValuePointable tvp2, DynamicContext dCtx, TypedPointables tp1, TypedPointables tp2)
- throws SystemException {
+ throws SystemException {
int tid1 = getBaseTypeForComparisons(tvp1.getTag());
int tid2 = getBaseTypeForComparisons(tvp2.getTag());
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/test/java/org/apache/vxquery/datamodel/AbstractPointableTest.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/test/java/org/apache/vxquery/datamodel/AbstractPointableTest.java b/vxquery-core/src/test/java/org/apache/vxquery/datamodel/AbstractPointableTest.java
new file mode 100644
index 0000000..9343465
--- /dev/null
+++ b/vxquery-core/src/test/java/org/apache/vxquery/datamodel/AbstractPointableTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.vxquery.datamodel;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.vxquery.datamodel.builders.atomic.StringValueBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+
+public class AbstractPointableTest {
+ private final ArrayBackedValueStorage abvsInput = new ArrayBackedValueStorage();
+ private final StringValueBuilder svb = new StringValueBuilder();
+
+ protected void getTaggedValuePointable(Object value, IPointable result) throws IOException {
+ int start = abvsInput.getLength();
+ if (value instanceof java.lang.Long) {
+ writeLong((Long) value, abvsInput.getDataOutput());
+ } else if (value instanceof java.lang.Double) {
+ writeDouble((Double) value, abvsInput.getDataOutput());
+ } else if (value instanceof java.lang.String) {
+ writeString((String) value, abvsInput.getDataOutput());
+ }
+ result.set(abvsInput.getByteArray(), start, abvsInput.getLength() - start);
+ }
+
+ protected void writeLong(Long value, DataOutput dOut) throws IOException {
+ dOut.write(ValueTag.XS_LONG_TAG);
+ dOut.writeLong(value);
+ }
+
+ protected void writeDouble(Double value, DataOutput dOut) throws IOException {
+ dOut.write(ValueTag.XS_DOUBLE_TAG);
+ dOut.writeDouble(value);
+ }
+
+ protected void writeString(String value, DataOutput dOut) throws IOException {
+ dOut.write(ValueTag.XS_STRING_TAG);
+ svb.write(value, dOut);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/7d7ab007/vxquery-core/src/test/java/org/apache/vxquery/datamodel/SequenceByteTest.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/test/java/org/apache/vxquery/datamodel/SequenceByteTest.java b/vxquery-core/src/test/java/org/apache/vxquery/datamodel/SequenceByteTest.java
new file mode 100644
index 0000000..776b97a
--- /dev/null
+++ b/vxquery-core/src/test/java/org/apache/vxquery/datamodel/SequenceByteTest.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.vxquery.datamodel;
+
+import java.io.IOException;
+
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.builders.sequence.SequenceBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.runtime.functions.util.FunctionHelper;
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+/**
+ * The sequence byte test covers empty sequences, single items and multi-item sequences.
+ *
+ * 1. Empty sequence constant
+ * 2. Empty sequence - {}
+ * 3. Single item - "one" (XQuery single item sequences are just the item.)
+ * 4. Many items - {1, 2.0, "three"}
+ */
+public class SequenceByteTest extends AbstractPointableTest {
+ private final ArrayBackedValueStorage abvsResult = new ArrayBackedValueStorage();
+ private final SequenceBuilder sb = new SequenceBuilder();
+ private final TaggedValuePointable tvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ private final TaggedValuePointable tvp1 = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ private final TaggedValuePointable tvp2 = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ private final TaggedValuePointable tvp3 = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ private final SequencePointable sp = (SequencePointable) SequencePointable.FACTORY.createPointable();
+
+ @Test
+ public void testEmptySequenceConstant() {
+ // Build test sequence
+ XDMConstants.setEmptySequence(tvp);
+
+ // Check results.
+ if (tvp.getTag() != ValueTag.SEQUENCE_TAG) {
+ Assert.fail("Type tag is incorrect. Expected: " + ValueTag.SEQUENCE_TAG + " Got: " + tvp.getTag());
+ }
+ tvp.getValue(sp);
+ if (sp.getEntryCount() != 0) {
+ Assert.fail("Sequence size is incorrect. Expected: 0 Got: " + sp.getEntryCount());
+ }
+ }
+
+ @Test
+ public void testEmptySequence() {
+ // Build test sequence
+ try {
+ sb.reset(abvsResult);
+ sb.finish();
+ } catch (IOException e) {
+ Assert.fail("Test failed to write the sequence pointable.");
+ }
+ tvp.set(abvsResult);
+
+ // Check results.
+ if (tvp.getTag() != ValueTag.SEQUENCE_TAG) {
+ Assert.fail("Type tag is incorrect. Expected: " + ValueTag.SEQUENCE_TAG + " Got: " + tvp.getTag());
+ }
+ tvp.getValue(sp);
+ if (sp.getEntryCount() != 0) {
+ Assert.fail("Sequence size is incorrect. Expected: 0 Got: " + sp.getEntryCount());
+ }
+ }
+
+ @Test
+ public void testSingleItemSequence() {
+ // Build test sequence
+ try {
+ sb.reset(abvsResult);
+ getTaggedValuePointable("one", tvp1);
+ sb.addItem(tvp1);
+ sb.finish();
+ } catch (IOException e) {
+ Assert.fail("Test failed to write the sequence pointable.");
+ }
+ tvp.set(abvsResult);
+
+ // Check results.
+ if (tvp.getTag() != ValueTag.XS_STRING_TAG) {
+ Assert.fail("Type tag is incorrect. Expected: " + ValueTag.XS_STRING_TAG + " Got: " + tvp.getTag());
+ }
+ if (!FunctionHelper.arraysEqual(tvp, tvp1)) {
+ Assert.fail("Item value is incorrect.");
+ }
+ }
+
+ @Test
+ public void testManyItemSequence() {
+ // Build test sequence
+ try {
+ // Add three items
+ sb.reset(abvsResult);
+ getTaggedValuePointable(1, tvp1);
+ sb.addItem(tvp1);
+ getTaggedValuePointable(2.0, tvp2);
+ sb.addItem(tvp2);
+ getTaggedValuePointable("three", tvp3);
+ sb.addItem(tvp3);
+ sb.finish();
+ } catch (IOException e) {
+ Assert.fail("Test failed to write the sequence pointable.");
+ }
+ tvp.set(abvsResult);
+
+ // Check results.
+ if (tvp.getTag() != ValueTag.SEQUENCE_TAG) {
+ Assert.fail("Sequence tag is incorrect. Expected: " + ValueTag.SEQUENCE_TAG + " Got: " + tvp.getTag());
+ }
+ tvp.getValue(sp);
+ if (sp.getEntryCount() != 3) {
+ Assert.fail("Sequence size is incorrect. Expected: 3 Got: " + sp.getEntryCount());
+ }
+ sp.getEntry(0, tvp);
+ if (!FunctionHelper.arraysEqual(tvp, tvp1)) {
+ Assert.fail("Sequence item one is incorrect. Expected: " + ValueTag.XS_LONG_TAG + " Got: " + tvp.getTag());
+ }
+ sp.getEntry(1, tvp);
+ if (!FunctionHelper.arraysEqual(tvp, tvp2)) {
+ Assert.fail(
+ "Sequence item two is incorrect. Expected: " + ValueTag.XS_DOUBLE_TAG + " Got: " + tvp.getTag());
+ }
+ sp.getEntry(2, tvp);
+ if (!FunctionHelper.arraysEqual(tvp, tvp3)) {
+ Assert.fail(
+ "Sequence item three is incorrect. Expected: " + ValueTag.XS_STRING_TAG + " Got: " + tvp.getTag());
+ }
+ }
+
+}