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/GeneralCollateralIndexRangeTest.java
-rw-r--r--
8977
  1package io.protobase.f7.spreadsheet;
  2
  3import io.protobase.f7.errors.ValueException;
  4import io.protobase.f7.testutils.TestExecution;
  5import org.junit.Test;
  6
  7/**
  8 * "Collateral Indexing" is what I call it when you're using a range inside a cell that runs parallel column-wise,
  9 * parallel row-wise, or both, but is in another grid.
 10 * <p>
 11 * Parallel Column-Wise:  C4 using A1:A10 results in a collateral index lookup of A4. The 4 is what's used here.
 12 * Parallel Row-Wise:  C4 using A1:D1 results in a collateral index lookup of C1. The C is what's used here.
 13 * Both:  C4 using OtherGrid!A1:C10 results in a collateral lookup of OtherGrid!C4. The C and the 4 are important.
 14 */
 15public class GeneralCollateralIndexRangeTest extends TestExecution {
 16  @Test
 17  public void test_ColumnWise() {
 18    runner()
 19        .addCell("Alpha", "A1", "= 1")
 20        .addCell("Alpha", "A2", "= 2")
 21        .addCell("Alpha", "A3", "= 3")
 22        .addCell("Alpha", "A4", "= 4")
 23        .addCell("Alpha", "B1", "= A1:A5")
 24        .addCell("Alpha", "B2", "= A1:A5")
 25        .addCell("Alpha", "B3", "= A1:A5")
 26        .addCell("Alpha", "B4", "= A1:A5")
 27        .addCell("Alpha", "B5", "= A1:A5")
 28        .addExpectedValue("Alpha", "B1", 1.0)
 29        .addExpectedValue("Alpha", "B2", 2.0)
 30        .addExpectedValue("Alpha", "B3", 3.0)
 31        .addExpectedValue("Alpha", "B4", 4.0)
 32        .addExpectedEmptyComputedValue("Alpha", "B5")
 33        .run();
 34  }
 35
 36  @Test
 37  public void test_RowWise() {
 38    runner()
 39        .addCell("Alpha", "A1", "= 1")
 40        .addCell("Alpha", "B1", "= 2")
 41        .addCell("Alpha", "C1", "= 3")
 42        .addCell("Alpha", "D1", "= 4")
 43        .addCell("Alpha", "A2", "= A1:E1")
 44        .addCell("Alpha", "B2", "= A1:E1")
 45        .addCell("Alpha", "C2", "= A1:E1")
 46        .addCell("Alpha", "D2", "= A1:E1")
 47        .addCell("Alpha", "E2", "= A1:E1")
 48        .addExpectedValue("Alpha", "A2", 1.0)
 49        .addExpectedValue("Alpha", "B2", 2.0)
 50        .addExpectedValue("Alpha", "C2", 3.0)
 51        .addExpectedValue("Alpha", "D2", 4.0)
 52        .addExpectedEmptyComputedValue("Alpha", "E2")
 53        .run();
 54  }
 55
 56  @Test
 57  public void test_ColumnWiseWithRowOffsetFirst() {
 58    runner()
 59        .addCell("Alpha", "A1", "= 1")
 60        .addCell("Alpha", "A2", "= 2")
 61        .addCell("Alpha", "A3", "= 3")
 62        .addCell("Alpha", "A4", "= 4")
 63        .addCell("Alpha", "B1", "= A1:A")
 64        .addCell("Alpha", "B2", "= A1:A")
 65        .addCell("Alpha", "B3", "= A1:A")
 66        .addCell("Alpha", "B4", "= A1:A")
 67        .addCell("Alpha", "B5", "= A1:A")
 68        .addExpectedValue("Alpha", "B1", 1.0)
 69        .addExpectedValue("Alpha", "B2", 2.0)
 70        .addExpectedValue("Alpha", "B3", 3.0)
 71        .addExpectedValue("Alpha", "B4", 4.0)
 72        .addExpectedEmptyComputedValue("Alpha", "B5")
 73        .run();
 74  }
 75
 76  @Test
 77  public void test_ColumnWiseWithRowOffsetLast() {
 78    runner()
 79        .addCell("Alpha", "A1", "= 1")
 80        .addCell("Alpha", "A2", "= 2")
 81        .addCell("Alpha", "A3", "= 3")
 82        .addCell("Alpha", "A4", "= 4")
 83        .addCell("Alpha", "B1", "= A:A1")
 84        .addCell("Alpha", "B2", "= A:A1")
 85        .addCell("Alpha", "B3", "= A:A1")
 86        .addCell("Alpha", "B4", "= A:A1")
 87        .addCell("Alpha", "B5", "= A:A1")
 88        .addExpectedValue("Alpha", "B1", 1.0)
 89        .addExpectedValue("Alpha", "B2", 2.0)
 90        .addExpectedValue("Alpha", "B3", 3.0)
 91        .addExpectedValue("Alpha", "B4", 4.0)
 92        .addExpectedEmptyComputedValue("Alpha", "B5")
 93        .run();
 94  }
 95
 96  @Test
 97  public void test_RowWiseWithColumnOffsetFirst() {
 98    runner()
 99        .addCell("Alpha", "A1", "= 1")
100        .addCell("Alpha", "B1", "= 2")
101        .addCell("Alpha", "C1", "= 3")
102        .addCell("Alpha", "D1", "= 4")
103        .addCell("Alpha", "A2", "= A1:1")
104        .addCell("Alpha", "B2", "= A1:1")
105        .addCell("Alpha", "C2", "= A1:1")
106        .addCell("Alpha", "D2", "= A1:1")
107        .addCell("Alpha", "E2", "= A1:1")
108        .addExpectedValue("Alpha", "A2", 1.0)
109        .addExpectedValue("Alpha", "B2", 2.0)
110        .addExpectedValue("Alpha", "C2", 3.0)
111        .addExpectedValue("Alpha", "D2", 4.0)
112        .addExpectedEmptyComputedValue("Alpha", "E2")
113        .run();
114  }
115
116  @Test
117  public void test_RowWiseWithColumnOffsetLast() {
118    runner()
119        .addCell("Alpha", "A1", "= 1")
120        .addCell("Alpha", "B1", "= 2")
121        .addCell("Alpha", "C1", "= 3")
122        .addCell("Alpha", "D1", "= 4")
123        .addCell("Alpha", "A2", "= 1:A1")
124        .addCell("Alpha", "B2", "= 1:A1")
125        .addCell("Alpha", "C2", "= 1:A1")
126        .addCell("Alpha", "D2", "= 1:A1")
127        .addCell("Alpha", "E2", "= 1:A1")
128        .addExpectedValue("Alpha", "A2", 1.0)
129        .addExpectedValue("Alpha", "B2", 2.0)
130        .addExpectedValue("Alpha", "C2", 3.0)
131        .addExpectedValue("Alpha", "D2", 4.0)
132        .addExpectedEmptyComputedValue("Alpha", "E2")
133        .run();
134  }
135
136  @Test
137  public void test_ColumnAndRowWise_Error() {
138    runner()
139        .addCell("Alpha", "A1", "= 1")
140        .addCell("Alpha", "A2", "= 2")
141        .addCell("Alpha", "B1", "= 3")
142        .addCell("Alpha", "B2", "= 4")
143        .addCell("Alpha", "K5", "= A1:B2")
144        .addExpectedValue("Alpha", "K5", new ValueException())
145        .run();
146  }
147
148  @Test
149  public void test_ColumnAndRowWise_CrossGrid() {
150    runner()
151        .addCell("Alpha", "A1", "= 1")
152        .addCell("Alpha", "A2", "= 2")
153        .addCell("Alpha", "A3", "= 3")
154        .addCell("Alpha", "A4", "= 4")
155        .addCell("Alpha", "B1", "= 1.1")
156        .addCell("Alpha", "B2", "= 2.1")
157        .addCell("Alpha", "B3", "= 3.1")
158        .addCell("Alpha", "B4", "= 4.1")
159        .addCell("Beta", "A1", "=Alpha!A1:B5")
160        .addCell("Beta", "A2", "=Alpha!A1:B5")
161        .addCell("Beta", "A3", "=Alpha!A1:B5")
162        .addCell("Beta", "A4", "=Alpha!A1:B5")
163        .addCell("Beta", "A5", "=Alpha!A1:B5")
164        .addCell("Beta", "B1", "=Alpha!A1:B5")
165        .addCell("Beta", "B2", "=Alpha!A1:B5")
166        .addCell("Beta", "B3", "=Alpha!A1:B5")
167        .addCell("Beta", "B4", "=Alpha!A1:B5")
168        .addCell("Beta", "B5", "=Alpha!A1:B5")
169        .addExpectedValue("Beta", "A1", 1.0)
170        .addExpectedValue("Beta", "A2", 2.0)
171        .addExpectedValue("Beta", "A3", 3.0)
172        .addExpectedValue("Beta", "A4", 4.0)
173        .addExpectedEmptyComputedValue("Beta", "A5")
174        .addExpectedValue("Beta", "B1", 1.1)
175        .addExpectedValue("Beta", "B2", 2.1)
176        .addExpectedValue("Beta", "B3", 3.1)
177        .addExpectedValue("Beta", "B4", 4.1)
178        .addExpectedEmptyComputedValue("Beta", "B5")
179        .run();
180  }
181
182  @Test
183  public void test_ArrayNotFound() {
184    runner()
185        .addCell("Alpha", "A1", "= 1")
186        .addCell("Beta", "M14", "=Alpha!A1:B5")
187        .addExpectedValue("Beta", "M14", new ValueException())
188        .run();
189  }
190
191  @Test
192  public void test_IndexErasureFromArrayLiteral() {
193    runner()
194        .addCell("Alpha", "A1", "= 1")
195        .addCell("Alpha", "A2", "= 2")
196        .addCell("Alpha", "A3", "= 3")
197        .addCell("Alpha", "A4", "= 4")
198        .addCell("Alpha", "B1", "= 1.1")
199        .addCell("Alpha", "B2", "= 2.1")
200        .addCell("Alpha", "B3", "= 3.1")
201        .addCell("Alpha", "B4", "= 4.1")
202        .addCell("Beta", "A1", "= {Alpha!A1:B5}")
203        .addExpectedValue("Beta", "A1", 1.0)
204        .addExpectedValue("Beta", "A2", 2.0)
205        .addExpectedValue("Beta", "A3", 3.0)
206        .addExpectedValue("Beta", "A4", 4.0)
207        .addExpectedEmptyComputedValue("Beta", "A5")
208        .addExpectedValue("Beta", "B1", 1.1)
209        .addExpectedValue("Beta", "B2", 2.1)
210        .addExpectedValue("Beta", "B3", 3.1)
211        .addExpectedValue("Beta", "B4", 4.1)
212        .addExpectedEmptyComputedValue("Beta", "B5")
213        .run();
214  }
215
216  @Test
217  public void test_All_RangeOperationsWithIndex() {
218    runner()
219        .addCell("Alpha", "A1", "= 10")
220        .addCell("Alpha", "A2", "= 20")
221        .addCell("Alpha", "A3", "= 30")
222        .addCell("Alpha", "B1", "= A1:A4")
223        .addCell("Alpha", "B2", "= A1:A4")
224        .addCell("Alpha", "B3", "= A1:A4")
225        .addCell("Alpha", "B4", "= A1:A4")
226        .addCell("Alpha", "B5", "= {A1:A4}")
227        .addCell("Alpha", "C10", "= {A1:A4 + 5}")
228        .addCell("Alpha", "C11", "= {A1 + 5}")
229        .addCell("Alpha", "C12", "= {A1:A1 + 5}")
230        .addExpectedValue("Alpha", "A1", 10.0)
231        .addExpectedValue("Alpha", "A2", 20.0)
232        .addExpectedValue("Alpha", "A3", 30.0)
233        .addExpectedValue("Alpha", "B1", 10.0)
234        .addExpectedValue("Alpha", "B2", 20.0)
235        .addExpectedValue("Alpha", "B3", 30.0)
236        .addExpectedEmptyComputedValue("Alpha", "B4")
237        .addExpectedValue("Alpha", "B5", 10.0)
238        .addExpectedValue("Alpha", "B6", 20.0)
239        .addExpectedValue("Alpha", "B7", 30.0)
240        .addExpectedValue("Alpha", "C10", new ValueException())
241        .addExpectedValue("Alpha", "C11", 15.0)
242        .addExpectedValue("Alpha", "C12", 15.0)
243        .run();
244  }
245}