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