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}