You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2023/01/11 16:39:10 UTC
[uima-uimaj] 01/01: Issue #272: select on FSArray seems broken
This is an automated email from the ASF dual-hosted git repository.
rec pushed a commit to branch bugfix/272-select-on-FSArray-seems-broken
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git
commit bb25f8ac4aa27e7e80e736d508005b236f916ea4
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Wed Jan 11 17:39:01 2023 +0100
Issue #272: select on FSArray seems broken
- Added a few simple tests for select on FSArray and FSList
- Fixed a bug in FSArray preventing the use of select
---
.../org/apache/uima/cas/impl/SelectFSs_impl.java | 2 +-
.../apache/uima/cas/impl/SelectFsFSArrayTest.java | 86 ++++++++++++++++++++++
.../apache/uima/cas/impl/SelectFsFSListTest.java | 86 ++++++++++++++++++++++
3 files changed, 173 insertions(+), 1 deletion(-)
diff --git a/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java b/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
index c0d6abaa8..6c28ee621 100644
--- a/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
+++ b/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
@@ -603,7 +603,7 @@ public class SelectFSs_impl<T extends FeatureStructure> implements SelectFSs<T>
index = ((LowLevelIndex) index).getSubIndex(ti);
}
} else {
- if (ti.isAnnotationType()) {
+ if (ti.isAnnotationType() && !isAltSource) {
forceAnnotationIndex(); // when index is null, but ti is not null and is annotation
}
}
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsFSArrayTest.java b/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsFSArrayTest.java
new file mode 100644
index 000000000..c3077d456
--- /dev/null
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsFSArrayTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.uima.cas.impl;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.cas.AnnotationBase;
+import org.apache.uima.jcas.cas.FSArray;
+import org.apache.uima.jcas.tcas.Annotation;
+import org.apache.uima.util.CasCreationUtils;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class SelectFsFSArrayTest {
+ private JCas jcas;
+
+ @BeforeEach
+ void setup() throws Exception {
+ jcas = CasCreationUtils.createCas().getJCas();
+ jcas.setDocumentText("This is a test.");
+ }
+
+ @Test
+ void thatSelectCountWithTypeIsConsistentWithArraySize() throws Exception {
+ int size = 10;
+
+ FSArray<FeatureStructure> array = new FSArray<>(jcas, size);
+ for (int i = 0; i < array.size(); i++) {
+ array.set(i, new Annotation(jcas));
+ }
+
+ assertThat(array) //
+ .hasSize(size) //
+ .hasSize((int) array.select(Annotation.class).count()) //
+ .hasSameSizeAs(array.select(Annotation.class));
+
+ array.addToIndexes();
+
+ assertThat(array) //
+ .hasSize(size) //
+ .hasSize((int) array.select(Annotation.class).count()) //
+ .hasSameSizeAs(array.select(Annotation.class));
+ }
+
+ @Test
+ void thatSelectCountWithSubTypeIsConsistentWithArraySize() throws Exception {
+ int size = 10;
+
+ FSArray<FeatureStructure> array = new FSArray<>(jcas, size);
+ for (int i = 0; i < array.size(); i++) {
+ switch (i % 2) {
+ case 0:
+ array.set(i, new Annotation(jcas));
+ break;
+ case 1:
+ array.set(i, new AnnotationBase(jcas));
+ break;
+ }
+ }
+
+ assertThat(array) //
+ .hasSize(size) //
+ .hasSize((int) array.select(AnnotationBase.class).count())
+ .hasSameSizeAs(array.select(AnnotationBase.class));
+
+ assertThat(array.select(Annotation.class).count()).isEqualTo(5);
+ }
+}
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsFSListTest.java b/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsFSListTest.java
new file mode 100644
index 000000000..99120503d
--- /dev/null
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/impl/SelectFsFSListTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.uima.cas.impl;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.cas.AnnotationBase;
+import org.apache.uima.jcas.cas.NonEmptyFSList;
+import org.apache.uima.jcas.cas.TOP;
+import org.apache.uima.jcas.tcas.Annotation;
+import org.apache.uima.util.CasCreationUtils;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class SelectFsFSListTest {
+ private JCas jcas;
+
+ @BeforeEach
+ void setup() throws Exception {
+ jcas = CasCreationUtils.createCas().getJCas();
+ jcas.setDocumentText("This is a test.");
+ }
+
+ @Test
+ void thatSelectCountWithTypeIsConsistentWithArraySize() throws Exception {
+ int size = 10;
+
+ NonEmptyFSList<TOP> list = new NonEmptyFSList<TOP>(jcas, new Annotation(jcas));
+ for (int i = 1; i < size; i++) {
+ list = new NonEmptyFSList<TOP>(jcas, new Annotation(jcas), list);
+ }
+
+ assertThat(list) //
+ .hasSize(size) //
+ .hasSize((int) list.select(Annotation.class).count()) //
+ .hasSameSizeAs(list.select(Annotation.class));
+
+ list.addToIndexes();
+
+ assertThat(list) //
+ .hasSize(size) //
+ .hasSize((int) list.select(Annotation.class).count()) //
+ .hasSameSizeAs(list.select(Annotation.class));
+ }
+
+ @Test
+ void thatSelectCountWithSubTypeIsConsistentWithArraySize() throws Exception {
+ int size = 10;
+
+ NonEmptyFSList<TOP> list = new NonEmptyFSList<TOP>(jcas, new Annotation(jcas));
+ for (int i = 1; i < size; i++) {
+ switch (i % 2) {
+ case 0:
+ list = new NonEmptyFSList<TOP>(jcas, new Annotation(jcas), list);
+ break;
+ case 1:
+ list = new NonEmptyFSList<TOP>(jcas, new AnnotationBase(jcas), list);
+ break;
+ }
+ }
+
+ assertThat(list) //
+ .hasSize(size) //
+ .hasSize((int) list.select(AnnotationBase.class).count())
+ .hasSameSizeAs(list.select(AnnotationBase.class));
+
+ assertThat(list.select(Annotation.class).count()).isEqualTo(5);
+ }
+}