f7
f7 is a spreadsheet formula execution library
git clone https://git.vogt.world/f7.git
Log | Files | README.md | LICENSE.md
← All files
name: src/test/java/io/protobase/f7/formulas/lookup/CHOOSETest.java
-rw-r--r--
2379
 1package io.protobase.f7.formulas.lookup;
 2
 3import io.protobase.f7.errors.DivException;
 4import io.protobase.f7.errors.NAException;
 5import io.protobase.f7.errors.NumException;
 6import io.protobase.f7.testutils.TestFormula;
 7import org.junit.Test;
 8
 9import static com.google.common.truth.Truth.assertThat;
10import static org.mockito.Mockito.verify;
11import static org.mockito.Mockito.verifyNoMoreInteractions;
12import static org.mockito.Mockito.when;
13
14public class CHOOSETest extends TestFormula {
15  @Test
16  public void testApply() {
17    assertThat(CHOOSE.SELF.apply(null, 1.0, "A")).isEqualTo("A");
18    assertThat(CHOOSE.SELF.apply(null, 1.0, "A", "B", "C")).isEqualTo("A");
19    assertThat(CHOOSE.SELF.apply(null, 2.0, "A", "B", "C")).isEqualTo("B");
20    assertThat(CHOOSE.SELF.apply(null, 3.0, "A", "B", "C")).isEqualTo("C");
21    assertThat(CHOOSE.SELF.apply(null, 3.9999999, "A", "B", "C")).isEqualTo("C");
22    assertThat(CHOOSE.SELF.apply(null, 3.000011, "A", "B", "C")).isEqualTo("C");
23    assertThat(CHOOSE.SELF.apply(null, 2.999999, "A", "B", "C")).isEqualTo("B");
24  }
25
26  @Test
27  public void testApply_indexOutOfBounds() {
28    assertThat(CHOOSE.SELF.apply(null, 2.0, "A")).isEqualTo(new NumException());
29    assertThat(CHOOSE.SELF.apply(null, 4.0, "A", "B", "C")).isEqualTo(new NumException());
30    assertThat(CHOOSE.SELF.apply(null, 0.0, "A", "B", "C")).isEqualTo(new NumException());
31    assertThat(CHOOSE.SELF.apply(null, -1.0, "A", "B", "C")).isEqualTo(new NumException());
32    assertThat(CHOOSE.SELF.apply(null, -99.0, "A", "B", "C")).isEqualTo(new NumException());
33  }
34
35  @Test
36  public void testApply_chooseError() {
37    assertThat(CHOOSE.SELF.apply(null, 1.0, new DivException())).isEqualTo(new DivException());
38    assertThat(CHOOSE.SELF.apply(null, 1.0, "A", new DivException())).isEqualTo("A");
39  }
40
41  @Test
42  public void test_lookup() {
43    CHOOSE F = new CHOOSE(lookup, collateralLookup);
44    when(collateralLookup.apply(A1, 1.0)).thenReturn(1.0);
45    when(lookup.apply(J6_RANGE)).thenReturn(10.0);
46    assertThat(F.apply(A1, 1.0, J6_RANGE)).isEqualTo(10.0);
47    verify(lookup).apply(J6_RANGE);
48    verify(collateralLookup).apply(A1, 1.0);
49    verifyNoMoreInteractions(lookup);
50    verifyNoMoreInteractions(collateralLookup);
51  }
52
53  @Test
54  public void test_errorFromArgumentsMismatch() {
55    assertThat(CHOOSE.SELF.apply(null, 1.0)).isEqualTo(new NAException());
56  }
57}