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