This is an automated email from the ASF dual-hosted git repository.

jzemerick pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opennlp.git


The following commit(s) were added to refs/heads/main by this push:
     new 5e3d16c8 OPENNLP-1340 - Get the probability for a sequence without 
copying the probabilities (#481)
5e3d16c8 is described below

commit 5e3d16c8bae7515ea5897ae6e461f00e42b924e2
Author: Richard Zowalla <[email protected]>
AuthorDate: Tue Jan 3 15:49:29 2023 +0100

    OPENNLP-1340 - Get the probability for a sequence without copying the 
probabilities (#481)
---
 .../src/main/java/opennlp/tools/util/Sequence.java | 27 ++++++++++-
 .../test/java/opennlp/tools/util/SequenceTest.java | 53 ++++++++++++++++++++++
 2 files changed, 79 insertions(+), 1 deletion(-)

diff --git a/opennlp-tools/src/main/java/opennlp/tools/util/Sequence.java 
b/opennlp-tools/src/main/java/opennlp/tools/util/Sequence.java
index eefa6807..1f7b271c 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/util/Sequence.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/util/Sequence.java
@@ -122,7 +122,32 @@ public class Sequence implements Comparable<Sequence> {
    * @return Retrieves a list of outcomes for this {@link Sequence}.
    */
   public List<String> getOutcomes() {
-    return outcomes;
+    return List.copyOf(outcomes);
+  }
+
+  /**
+   * @return Retrieves the size of the outcomes for this {@link Sequence}.
+   */
+  public int getSize() {
+    return outcomes.size();
+  }
+
+  /**
+   * @param index must be greater than or equal to zero and must be less than 
{@link Sequence#getSize()}.
+   * @return the outcome at the specified index.
+   * @throws IndexOutOfBoundsException thrown if the given index is out of 
range.
+   */
+  public String getOutcome(int index) {
+    return outcomes.get(index);
+  }
+
+  /**
+   * @param index must be greater than or equal to zero and must be less than 
{@link Sequence#getSize()}.
+   * @return the probability at the specified index.
+   * @throws IndexOutOfBoundsException thrown if the given index is out of 
range.
+   */
+  public double getProb(int index) {
+    return probs.get(index);
   }
 
   /**
diff --git a/opennlp-tools/src/test/java/opennlp/tools/util/SequenceTest.java 
b/opennlp-tools/src/test/java/opennlp/tools/util/SequenceTest.java
index 669b65da..3c6a0d41 100644
--- a/opennlp-tools/src/test/java/opennlp/tools/util/SequenceTest.java
+++ b/opennlp-tools/src/test/java/opennlp/tools/util/SequenceTest.java
@@ -85,4 +85,57 @@ public class SequenceTest {
     sequence.add("test", 0.1d);
     sequence.toString();
   }
+
+  @Test
+  void testGetAtIndex() {
+    final Sequence sequence = new Sequence();
+    sequence.add("A", 1d);
+    sequence.add("B", 2d);
+    sequence.add("C", 3d);
+
+    Assertions.assertEquals(3, sequence.getSize());
+
+    Assertions.assertEquals("A", sequence.getOutcome(0));
+    Assertions.assertEquals("B", sequence.getOutcome(1));
+    Assertions.assertEquals("C", sequence.getOutcome(2));
+
+    Assertions.assertEquals(1d, sequence.getProb(0));
+    Assertions.assertEquals(2d, sequence.getProb(1));
+    Assertions.assertEquals(3d, sequence.getProb(2));
+  }
+
+  @Test
+  void testGetAtIndexInvalid() {
+    final Sequence sequence = new Sequence();
+    sequence.add("A", 1d);
+
+    Assertions.assertThrows(IndexOutOfBoundsException.class, () -> {
+      sequence.getOutcome(-1);
+    });
+
+    Assertions.assertThrows(IndexOutOfBoundsException.class, () -> {
+      sequence.getOutcome(sequence.getSize() + 1);
+    });
+
+    Assertions.assertThrows(IndexOutOfBoundsException.class, () -> {
+      sequence.getProb(-1);
+    });
+
+    Assertions.assertThrows(IndexOutOfBoundsException.class, () -> {
+      sequence.getProb(sequence.getSize() + 1);
+    });
+  }
+
+  @Test
+  void testListCopy() {
+    final Sequence sequence = new Sequence();
+    sequence.add("A", 1d);
+
+    Assertions.assertEquals(1, sequence.getSize());
+
+    Assertions.assertThrows(UnsupportedOperationException.class, () -> {
+      sequence.getOutcomes().add("This should fail! " +
+          "It should not be possible to modify the internal state");
+    });
+  }
 }

Reply via email to