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/spreadsheet/F7CodeExecutorGeneralInequalityComparisonTest.java
-rw-r--r--
5972
  1package io.protobase.f7.spreadsheet;
  2
  3import io.protobase.f7.errors.RefException;
  4import io.protobase.f7.testutils.TestF7CodeExecutor;
  5import org.junit.Before;
  6import org.junit.Test;
  7import org.mockito.internal.verification.VerificationModeFactory;
  8
  9import java.util.function.BiFunction;
 10import java.util.function.Function;
 11
 12import static com.google.common.truth.Truth.assertThat;
 13import static org.mockito.Mockito.mock;
 14import static org.mockito.Mockito.verify;
 15import static org.mockito.Mockito.when;
 16
 17public class F7CodeExecutorGeneralInequalityComparisonTest extends TestF7CodeExecutor {
 18  @Before
 19  public void setup() {
 20    lookup = mock(Function.class);
 21    collateralLookup = mock(BiFunction.class);
 22  }
 23
 24  @Test
 25  public void test_Number() {
 26    assertThat(run("= 1 <> 1")).isEqualTo(false);
 27    assertThat(run("= 1 <> 2")).isEqualTo(true);
 28    assertThat(run("= 1.1928731 <> 1.1928731")).isEqualTo(false);
 29  }
 30
 31  @Test
 32  public void test_String() {
 33    assertThat(run("= \"Yes\" <> \"Yes\"")).isEqualTo(false);
 34    assertThat(run("= \"Yes\" <> \"No\"")).isEqualTo(true);
 35    assertThat(run("= \"\" <> \"\"")).isEqualTo(false);
 36  }
 37
 38  @Test
 39  public void test_Boolean() {
 40    assertThat(run("= TRUE <> TRUE")).isEqualTo(false);
 41    assertThat(run("= FALSE <> FALSE")).isEqualTo(false);
 42    assertThat(run("= TRUE <> FALSE")).isEqualTo(true);
 43  }
 44
 45  @Test
 46  public void test_ArrayLiteral() {
 47    assertThat(run("= {1, 2, 3} <> {1, 2, 3}")).isEqualTo(false);
 48    assertThat(run("= {1, 2, 3} <> {44}")).isEqualTo(true);
 49    assertThat(run("= {44, #REF!} <> {44, #REF!}")).isEqualTo(false);
 50  }
 51
 52  @Test
 53  public void test_NumberToBoolean() {
 54    assertThat(run("= 0 <> TRUE")).isEqualTo(true);
 55    assertThat(run("= 1 <> TRUE")).isEqualTo(true);
 56    assertThat(run("= 1 <> FALSE")).isEqualTo(true);
 57    assertThat(run("= 0 <> FALSE")).isEqualTo(true);
 58  }
 59
 60  @Test
 61  public void test_NumberToString() {
 62    assertThat(run("= 0 <> \"\"")).isEqualTo(true);
 63    assertThat(run("= 0 <> \"0\"")).isEqualTo(true);
 64    assertThat(run("= 1 <> \"0\"")).isEqualTo(true);
 65    assertThat(run("= 1 <> \"1\"")).isEqualTo(true);
 66  }
 67
 68  @Test
 69  public void test_NumberToArrayLiteral() {
 70    assertThat(run("= 0 <> {0, 1, 2}")).isEqualTo(false);
 71    assertThat(run("= 1 <> {0, 1, 2}")).isEqualTo(true);
 72  }
 73
 74  @Test
 75  public void test_NumberToBlank() {
 76    when(collateralLookup.apply(A1, M44_RANGE)).thenReturn(null);
 77    when(collateralLookup.apply(A1, 0.0)).thenReturn(0.0);
 78    when(collateralLookup.apply(A1, 1.0)).thenReturn(1.0);
 79    when(collateralLookup.apply(A1, -1.0)).thenReturn(-1.0);
 80    assertThat(runWithLookup("= 0 <> M44")).isEqualTo(false);
 81    assertThat(runWithLookup("= 1 <> M44")).isEqualTo(true);
 82    assertThat(runWithLookup("= M44 <> 0")).isEqualTo(false);
 83    assertThat(runWithLookup("= M44 <> 1")).isEqualTo(true);
 84    assertThat(runWithLookup("= -1 <> M44")).isEqualTo(true);
 85    assertThat(runWithLookup("= M44 <> -1")).isEqualTo(true);
 86    verify(collateralLookup, VerificationModeFactory.times(6)).apply(A1, M44_RANGE);
 87    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, 0.0);
 88    verify(collateralLookup, VerificationModeFactory.times(4)).apply(A1, 1.0);
 89    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, -1.0);
 90  }
 91
 92  @Test
 93  public void test_StringToBoolean() {
 94    assertThat(run("= \"TRUE\" <> TRUE")).isEqualTo(true);
 95    assertThat(run("= \"FALSE\" <> FALSE")).isEqualTo(true);
 96  }
 97
 98  @Test
 99  public void test_StringToBlank() {
100    when(collateralLookup.apply(A1, M44_RANGE)).thenReturn(null);
101    when(collateralLookup.apply(A1, "")).thenReturn("");
102    when(collateralLookup.apply(A1, "One")).thenReturn("One");
103    when(collateralLookup.apply(A1, " ")).thenReturn(" ");
104    assertThat(runWithLookup("= \"\" <> M44")).isEqualTo(false);
105    assertThat(runWithLookup("= M44 <> \"\"")).isEqualTo(false);
106    assertThat(runWithLookup("= \" \" <> M44")).isEqualTo(true);
107    assertThat(runWithLookup("= M44 <> \" \"")).isEqualTo(true);
108    assertThat(runWithLookup("= \"One\" <> M44")).isEqualTo(true);
109    assertThat(runWithLookup("= M44 <> \"One\"")).isEqualTo(true);
110    verify(collateralLookup, VerificationModeFactory.times(6)).apply(A1, M44_RANGE);
111    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, "");
112    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, " ");
113    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, "One");
114  }
115
116  @Test
117  public void test_BooleanToBlank() {
118    when(collateralLookup.apply(A1, M44_RANGE)).thenReturn(null);
119    when(collateralLookup.apply(A1, true)).thenReturn(true);
120    when(collateralLookup.apply(A1, false)).thenReturn(false);
121    assertThat(runWithLookup("= TRUE <> M44")).isEqualTo(true);
122    assertThat(runWithLookup("= FALSE <> M44")).isEqualTo(false);
123    assertThat(runWithLookup("= M44 <> TRUE")).isEqualTo(true);
124    assertThat(runWithLookup("= M44 <> FALSE")).isEqualTo(false);
125    verify(collateralLookup, VerificationModeFactory.times(4)).apply(A1, M44_RANGE);
126    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, true);
127    verify(collateralLookup, VerificationModeFactory.times(2)).apply(A1, false);
128  }
129
130  @Test
131  public void test_ArrayLiteralToString() {
132    assertThat(run("= {\"A\", \"B\"} <> \"A\"")).isEqualTo(false);
133    assertThat(run("= \"A\" <> {\"A\", \"B\"}")).isEqualTo(false);
134    assertThat(run("= \"B\" <> {\"A\", \"B\"}")).isEqualTo(true);
135  }
136
137  @Test
138  public void test_ArrayLiteralToBoolean() {
139    assertThat(run("= {TRUE, FALSE} <> TRUE")).isEqualTo(false);
140    assertThat(run("= TRUE <> {TRUE, FALSE}")).isEqualTo(false);
141    assertThat(run("= {FALSE, FALSE} <> TRUE")).isEqualTo(true);
142    assertThat(run("= TRUE <> {FALSE, FALSE}")).isEqualTo(true);
143  }
144
145  @Test
146  public void test_Error() {
147    assertThat(run("= 10 <> #REF!")).isEqualTo(new RefException());
148    assertThat(run("= #REF! <> TRUE")).isEqualTo(new RefException());
149  }
150}