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}