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}