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}