xref: /trunk/test/aoo-test/data/calcval-cases.tsv (revision 2c760c133df3253aa7075d23c106a30339fca6f2)
1################################################################
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20################################################################
21
22# calcval cases for calcval.py.  Columns (tab separated): id, formula, mode, expected, note.
23# formula: AOO API syntax (English function names, ';' separators, '|' row separator in inline arrays), leading '='.
24# mode: cell | cell@N (plain cell, scratch cell AA<N>; default AA1) | array[:CxR] (setArrayFormula on AA1 sized C columns x R rows; default 1x1).
25# expected: '-' = record only; number (relative tolerance 1e-9; '~' prefix = 1e-6); '#N/A'; '#ERR' (any error); 's:text'; for array modes a '|' separated row-major list of those.
26# RECEIVED, BESSELK, BESSELY are Analysis add-in functions: calcval.py rewrites them to their programmatic names.
27# Expected values come from the public ODF 1.3 Part 4 text (OpenDocument-v1.3-os-part4-formula).
28#
29# Data written by calcval.py on sheet 1 (second sheet is named Other):
30#   A1:A9  y,x,x,y,x,y,x,x,y            B1:B9  y,x,y,y,y,y,x,y,x
31#   D1:F5  D=10,20,30,40,50  E=11,22,33,44,55  F=101,202,303,404,505
32#   H1:L3  row1 10,20,30,40,50  row2 11,22,33,44,55  row3 101,202,303,404,505
33#   N1:N6  3,5,8,9,13,14 (y)   O1:O6  1..6 (x)   P1:P6  2,4,7,15,30,58 (positive y)
34#   R1:T6  database: header Name,Age,Score; A,20,5; B,30,"n/a"; C,40,15; D,50,(empty); E,60,25
35#   V1:V2  criteria Age,">=30"   W1:W2  criteria Age,(empty)   Y1:Y2  criteria Name,"A"
36#   AH1:AH11 6,6,6,6,3,2,1,2,6,4,2 (variance 4.2)   AI1:AI3 1,3,5 (variance 4)
37#   AJ1:AJ4 and AK1:AK4  2,4,7,9
38#   Scratch area AA1:AF12 is cleared after every case.
39WEEKDAY.Sun.1   =WEEKDAY(DATE(2024;1;7);1)  cell    1   Part 4 6.10.20 Table 6, Sunday type 1
40WEEKDAY.Sun.2   =WEEKDAY(DATE(2024;1;7);2)  cell    7   Part 4 6.10.20 Table 6, Sunday type 2
41WEEKDAY.Sun.3   =WEEKDAY(DATE(2024;1;7);3)  cell    6   Part 4 6.10.20 Table 6, Sunday type 3
42WEEKDAY.Sun.11  =WEEKDAY(DATE(2024;1;7);11) cell    7   Part 4 6.10.20 Table 6, Sunday type 11
43WEEKDAY.Sun.12  =WEEKDAY(DATE(2024;1;7);12) cell    6   Part 4 6.10.20 Table 6, Sunday type 12
44WEEKDAY.Sun.13  =WEEKDAY(DATE(2024;1;7);13) cell    5   Part 4 6.10.20 Table 6, Sunday type 13
45WEEKDAY.Sun.14  =WEEKDAY(DATE(2024;1;7);14) cell    4   Part 4 6.10.20 Table 6, Sunday type 14
46WEEKDAY.Sun.15  =WEEKDAY(DATE(2024;1;7);15) cell    3   Part 4 6.10.20 Table 6, Sunday type 15
47WEEKDAY.Sun.16  =WEEKDAY(DATE(2024;1;7);16) cell    2   Part 4 6.10.20 Table 6, Sunday type 16
48WEEKDAY.Sun.17  =WEEKDAY(DATE(2024;1;7);17) cell    1   Part 4 6.10.20 Table 6, Sunday type 17
49WEEKDAY.Mon.1   =WEEKDAY(DATE(2024;1;8);1)  cell    2   Part 4 6.10.20 Table 6, Monday type 1
50WEEKDAY.Mon.2   =WEEKDAY(DATE(2024;1;8);2)  cell    1   Part 4 6.10.20 Table 6, Monday type 2
51WEEKDAY.Mon.3   =WEEKDAY(DATE(2024;1;8);3)  cell    0   Part 4 6.10.20 Table 6, Monday type 3
52WEEKDAY.Mon.11  =WEEKDAY(DATE(2024;1;8);11) cell    1   Part 4 6.10.20 Table 6, Monday type 11
53WEEKDAY.Mon.12  =WEEKDAY(DATE(2024;1;8);12) cell    7   Part 4 6.10.20 Table 6, Monday type 12
54WEEKDAY.Mon.13  =WEEKDAY(DATE(2024;1;8);13) cell    6   Part 4 6.10.20 Table 6, Monday type 13
55WEEKDAY.Mon.14  =WEEKDAY(DATE(2024;1;8);14) cell    5   Part 4 6.10.20 Table 6, Monday type 14
56WEEKDAY.Mon.15  =WEEKDAY(DATE(2024;1;8);15) cell    4   Part 4 6.10.20 Table 6, Monday type 15
57WEEKDAY.Mon.16  =WEEKDAY(DATE(2024;1;8);16) cell    3   Part 4 6.10.20 Table 6, Monday type 16
58WEEKDAY.Mon.17  =WEEKDAY(DATE(2024;1;8);17) cell    2   Part 4 6.10.20 Table 6, Monday type 17
59WEEKDAY.Tue.1   =WEEKDAY(DATE(2024;1;9);1)  cell    3   Part 4 6.10.20 Table 6, Tuesday type 1
60WEEKDAY.Tue.2   =WEEKDAY(DATE(2024;1;9);2)  cell    2   Part 4 6.10.20 Table 6, Tuesday type 2
61WEEKDAY.Tue.3   =WEEKDAY(DATE(2024;1;9);3)  cell    1   Part 4 6.10.20 Table 6, Tuesday type 3
62WEEKDAY.Tue.11  =WEEKDAY(DATE(2024;1;9);11) cell    2   Part 4 6.10.20 Table 6, Tuesday type 11
63WEEKDAY.Tue.12  =WEEKDAY(DATE(2024;1;9);12) cell    1   Part 4 6.10.20 Table 6, Tuesday type 12
64WEEKDAY.Tue.13  =WEEKDAY(DATE(2024;1;9);13) cell    7   Part 4 6.10.20 Table 6, Tuesday type 13
65WEEKDAY.Tue.14  =WEEKDAY(DATE(2024;1;9);14) cell    6   Part 4 6.10.20 Table 6, Tuesday type 14
66WEEKDAY.Tue.15  =WEEKDAY(DATE(2024;1;9);15) cell    5   Part 4 6.10.20 Table 6, Tuesday type 15
67WEEKDAY.Tue.16  =WEEKDAY(DATE(2024;1;9);16) cell    4   Part 4 6.10.20 Table 6, Tuesday type 16
68WEEKDAY.Tue.17  =WEEKDAY(DATE(2024;1;9);17) cell    3   Part 4 6.10.20 Table 6, Tuesday type 17
69WEEKDAY.Wed.1   =WEEKDAY(DATE(2024;1;10);1) cell    4   Part 4 6.10.20 Table 6, Wednesday type 1
70WEEKDAY.Wed.2   =WEEKDAY(DATE(2024;1;10);2) cell    3   Part 4 6.10.20 Table 6, Wednesday type 2
71WEEKDAY.Wed.3   =WEEKDAY(DATE(2024;1;10);3) cell    2   Part 4 6.10.20 Table 6, Wednesday type 3
72WEEKDAY.Wed.11  =WEEKDAY(DATE(2024;1;10);11)    cell    3   Part 4 6.10.20 Table 6, Wednesday type 11
73WEEKDAY.Wed.12  =WEEKDAY(DATE(2024;1;10);12)    cell    2   Part 4 6.10.20 Table 6, Wednesday type 12
74WEEKDAY.Wed.13  =WEEKDAY(DATE(2024;1;10);13)    cell    1   Part 4 6.10.20 Table 6, Wednesday type 13
75WEEKDAY.Wed.14  =WEEKDAY(DATE(2024;1;10);14)    cell    7   Part 4 6.10.20 Table 6, Wednesday type 14
76WEEKDAY.Wed.15  =WEEKDAY(DATE(2024;1;10);15)    cell    6   Part 4 6.10.20 Table 6, Wednesday type 15
77WEEKDAY.Wed.16  =WEEKDAY(DATE(2024;1;10);16)    cell    5   Part 4 6.10.20 Table 6, Wednesday type 16
78WEEKDAY.Wed.17  =WEEKDAY(DATE(2024;1;10);17)    cell    4   Part 4 6.10.20 Table 6, Wednesday type 17
79WEEKDAY.Thu.1   =WEEKDAY(DATE(2024;1;11);1) cell    5   Part 4 6.10.20 Table 6, Thursday type 1
80WEEKDAY.Thu.2   =WEEKDAY(DATE(2024;1;11);2) cell    4   Part 4 6.10.20 Table 6, Thursday type 2
81WEEKDAY.Thu.3   =WEEKDAY(DATE(2024;1;11);3) cell    3   Part 4 6.10.20 Table 6, Thursday type 3
82WEEKDAY.Thu.11  =WEEKDAY(DATE(2024;1;11);11)    cell    4   Part 4 6.10.20 Table 6, Thursday type 11
83WEEKDAY.Thu.12  =WEEKDAY(DATE(2024;1;11);12)    cell    3   Part 4 6.10.20 Table 6, Thursday type 12
84WEEKDAY.Thu.13  =WEEKDAY(DATE(2024;1;11);13)    cell    2   Part 4 6.10.20 Table 6, Thursday type 13
85WEEKDAY.Thu.14  =WEEKDAY(DATE(2024;1;11);14)    cell    1   Part 4 6.10.20 Table 6, Thursday type 14
86WEEKDAY.Thu.15  =WEEKDAY(DATE(2024;1;11);15)    cell    7   Part 4 6.10.20 Table 6, Thursday type 15
87WEEKDAY.Thu.16  =WEEKDAY(DATE(2024;1;11);16)    cell    6   Part 4 6.10.20 Table 6, Thursday type 16
88WEEKDAY.Thu.17  =WEEKDAY(DATE(2024;1;11);17)    cell    5   Part 4 6.10.20 Table 6, Thursday type 17
89WEEKDAY.Fri.1   =WEEKDAY(DATE(2024;1;12);1) cell    6   Part 4 6.10.20 Table 6, Friday type 1
90WEEKDAY.Fri.2   =WEEKDAY(DATE(2024;1;12);2) cell    5   Part 4 6.10.20 Table 6, Friday type 2
91WEEKDAY.Fri.3   =WEEKDAY(DATE(2024;1;12);3) cell    4   Part 4 6.10.20 Table 6, Friday type 3
92WEEKDAY.Fri.11  =WEEKDAY(DATE(2024;1;12);11)    cell    5   Part 4 6.10.20 Table 6, Friday type 11
93WEEKDAY.Fri.12  =WEEKDAY(DATE(2024;1;12);12)    cell    4   Part 4 6.10.20 Table 6, Friday type 12
94WEEKDAY.Fri.13  =WEEKDAY(DATE(2024;1;12);13)    cell    3   Part 4 6.10.20 Table 6, Friday type 13
95WEEKDAY.Fri.14  =WEEKDAY(DATE(2024;1;12);14)    cell    2   Part 4 6.10.20 Table 6, Friday type 14
96WEEKDAY.Fri.15  =WEEKDAY(DATE(2024;1;12);15)    cell    1   Part 4 6.10.20 Table 6, Friday type 15
97WEEKDAY.Fri.16  =WEEKDAY(DATE(2024;1;12);16)    cell    7   Part 4 6.10.20 Table 6, Friday type 16
98WEEKDAY.Fri.17  =WEEKDAY(DATE(2024;1;12);17)    cell    6   Part 4 6.10.20 Table 6, Friday type 17
99WEEKDAY.Sat.1   =WEEKDAY(DATE(2024;1;13);1) cell    7   Part 4 6.10.20 Table 6, Saturday type 1
100WEEKDAY.Sat.2   =WEEKDAY(DATE(2024;1;13);2) cell    6   Part 4 6.10.20 Table 6, Saturday type 2
101WEEKDAY.Sat.3   =WEEKDAY(DATE(2024;1;13);3) cell    5   Part 4 6.10.20 Table 6, Saturday type 3
102WEEKDAY.Sat.11  =WEEKDAY(DATE(2024;1;13);11)    cell    6   Part 4 6.10.20 Table 6, Saturday type 11
103WEEKDAY.Sat.12  =WEEKDAY(DATE(2024;1;13);12)    cell    5   Part 4 6.10.20 Table 6, Saturday type 12
104WEEKDAY.Sat.13  =WEEKDAY(DATE(2024;1;13);13)    cell    4   Part 4 6.10.20 Table 6, Saturday type 13
105WEEKDAY.Sat.14  =WEEKDAY(DATE(2024;1;13);14)    cell    3   Part 4 6.10.20 Table 6, Saturday type 14
106WEEKDAY.Sat.15  =WEEKDAY(DATE(2024;1;13);15)    cell    2   Part 4 6.10.20 Table 6, Saturday type 15
107WEEKDAY.Sat.16  =WEEKDAY(DATE(2024;1;13);16)    cell    1   Part 4 6.10.20 Table 6, Saturday type 16
108WEEKDAY.Sat.17  =WEEKDAY(DATE(2024;1;13);17)    cell    7   Part 4 6.10.20 Table 6, Saturday type 17
109WEEKDAY.Wed.0   =WEEKDAY(DATE(2024;1;10);0) cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
110WEEKDAY.Wed.4   =WEEKDAY(DATE(2024;1;10);4) cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
111WEEKDAY.Wed.10  =WEEKDAY(DATE(2024;1;10);10)    cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
112WEEKDAY.Wed.18  =WEEKDAY(DATE(2024;1;10);18)    cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
113WEEKDAY.Wed.m1  =WEEKDAY(DATE(2024;1;10);-1)    cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
114WEEKDAY.Wed.2p7 =WEEKDAY(DATE(2024;1;10);2.7)   cell    -   non-integer Type; conversion to Integer is implementation-defined (6.3.6)
115WEEKDAY.Wed.default =WEEKDAY(DATE(2024;1;10))   cell    4   Type omitted defaults to 1 (6.10.20 syntax); Wednesday type 1 = 4
116WEEKDAY.Sat.default =WEEKDAY(DATE(2024;1;13))   cell    7   Type omitted defaults to 1; Saturday = 7
117RECEIVED.lt.12m =RECEIVED(DATE(2024;1;1);DATE(2025;1;1);1000;0.05)  cell    1052.63157895   Investment/(1-Discount*YEARFRAC), basis 0 (30/360) YEARFRAC=1
118RECEIVED.lt.6m  =RECEIVED(DATE(2024;1;1);DATE(2024;7;1);1000;0.05)  cell    1025.64102564   basis 0 YEARFRAC=180/360=0.5
119RECEIVED.eq =RECEIVED(DATE(2024;1;1);DATE(2024;1;1);1000;0.05)  cell    -   Settlement = Maturity violates constraint Settlement < Maturity; no value specified
120RECEIVED.gt =RECEIVED(DATE(2025;1;1);DATE(2024;1;1);1000;0.05)  cell    -   Settlement > Maturity violates constraint Settlement < Maturity; no value specified
121DCOUNT.name.crit    =DCOUNT(R1:T6;"Name";V1:V2) cell    0   Age>=30 matches 4 records; Name is text: COUNT 0, COUNTA 4
122DCOUNT.score.crit   =DCOUNT(R1:T6;"Score";V1:V2)    cell    2   Age>=30 records have Score n/a, 15, empty, 25: COUNT 2, COUNTA 3
123DCOUNT.namecase =DCOUNT(R1:T6;"score";V1:V2)    cell    2   4.11.10: field names should match case-insensitively
124DCOUNT.idx.crit =DCOUNT(R1:T6;3;V1:V2)  cell    2   4.11.10: Number field selects column 3 (Score)
125DCOUNT.zero.crit    =DCOUNT(R1:T6;0;V1:V2)  cell    #ERR    KNOWN DEVIATION, kept on purpose: 0 means the whole database in AOO (legacy, documented in its help); 4.11.10: Number field is a positive integer; field 0 does not exist, so Error
126DCOUNT.badfield =DCOUNT(R1:T6;9;V1:V2)  cell    #ERR    4.11.10: nonexistent field returns Error
127DCOUNT.badname  =DCOUNT(R1:T6;"Nope";V1:V2) cell    #ERR    4.11.10: nonexistent field name returns Error
128DCOUNT.omit.crit    =DCOUNT(R1:T6;;V1:V2)   cell    4   Field omitted: count of all records satisfying criteria (Age>=30 = 4)
129DCOUNT.omit.name    =DCOUNT(R1:T6;;Y1:Y2)   cell    1   Field omitted, criteria Name=A matches 1 record
130DCOUNT.two.param    =DCOUNT(R1:T6;V1:V2)    cell    -   syntax is D ; [F] ; C, separators required; the two-parameter form is not listed
131DCOUNT.emptycrit    =DCOUNT(R1:T6;"Age";W1:W2)  cell    0   KNOWN DEVIATION, kept on purpose: one reading of 4.11.11; AOO ignores empty criteria cells (documented in its help); 4.11.11: empty criterion cell is the numeric value 0; no record has Age 0
132DCOUNTA.name.crit   =DCOUNTA(R1:T6;"Name";V1:V2)    cell    4   Age>=30 matches 4 records; Name is text: COUNT 0, COUNTA 4
133DCOUNTA.score.crit  =DCOUNTA(R1:T6;"Score";V1:V2)   cell    3   Age>=30 records have Score n/a, 15, empty, 25: COUNT 2, COUNTA 3
134DCOUNTA.namecase    =DCOUNTA(R1:T6;"score";V1:V2)   cell    3   4.11.10: field names should match case-insensitively
135DCOUNTA.idx.crit    =DCOUNTA(R1:T6;3;V1:V2) cell    3   4.11.10: Number field selects column 3 (Score)
136DCOUNTA.zero.crit   =DCOUNTA(R1:T6;0;V1:V2) cell    #ERR    KNOWN DEVIATION, kept on purpose: 0 means the whole database in AOO (legacy, documented in its help); 4.11.10: Number field is a positive integer; field 0 does not exist, so Error
137DCOUNTA.badfield    =DCOUNTA(R1:T6;9;V1:V2) cell    #ERR    4.11.10: nonexistent field returns Error
138DCOUNTA.badname =DCOUNTA(R1:T6;"Nope";V1:V2)    cell    #ERR    4.11.10: nonexistent field name returns Error
139DCOUNTA.omit.crit   =DCOUNTA(R1:T6;;V1:V2)  cell    4   Field omitted: count of all records satisfying criteria (Age>=30 = 4)
140DCOUNTA.omit.name   =DCOUNTA(R1:T6;;Y1:Y2)  cell    1   Field omitted, criteria Name=A matches 1 record
141DCOUNTA.two.param   =DCOUNTA(R1:T6;V1:V2)   cell    -   syntax is D ; [F] ; C, separators required; the two-parameter form is not listed
142DCOUNTA.emptycrit   =DCOUNTA(R1:T6;"Age";W1:W2) cell    0   KNOWN DEVIATION, kept on purpose: one reading of 4.11.11; AOO ignores empty criteria cells (documented in its help); 4.11.11: empty criterion cell is the numeric value 0; no record has Age 0
143IF.a.true   =IF(1=1)    cell    1   6.15.4: IfTrue is TRUE (case a); TRUE as number 1
144IF.a.false  =IF(1=2)    cell    0   6.15.4: IfFalse is FALSE (case a); FALSE as number 0
145IF.b.true   =IF(1=1;)   cell    0   6.15.4: IfTrue null is 0 (case b); TRUE as number 1
146IF.b.false  =IF(1=2;)   cell    0   6.15.4: IfFalse is FALSE with 2 parameters (case b); FALSE as number 0
147IF.c.true   =IF(1=1;5)  cell    5   6.15.4: IfTrue (case c); TRUE as number 1
148IF.c.false  =IF(1=2;5)  cell    0   6.15.4: IfFalse is FALSE with 2 parameters (case c); FALSE as number 0
149IF.d.true   =IF(1=1;;)  cell    0   6.15.4: IfTrue null is 0 (case d); TRUE as number 1
150IF.d.false  =IF(1=2;;)  cell    0   6.15.4: IfFalse null is 0 (case d); FALSE as number 0
151IF.e.true   =IF(1=1;;7) cell    0   6.15.4: IfTrue null is 0 (case e); TRUE as number 1
152IF.e.false  =IF(1=2;;7) cell    7   6.15.4: IfFalse (case e); FALSE as number 0
153IF.f.true   =IF(1=1;5;) cell    5   6.15.4: IfTrue (case f); TRUE as number 1
154IF.f.false  =IF(1=2;5;) cell    0   6.15.4: IfFalse null is 0 (case f); FALSE as number 0
155IF.g.true   =IF(1=1;5;7)    cell    5   6.15.4: IfTrue (case g); TRUE as number 1
156IF.g.false  =IF(1=2;5;7)    cell    7   6.15.4: IfFalse (case g); FALSE as number 0
157IF.text.true    =IF(1=1;"a";"b")    cell    s:a control
158IF.text.false   =IF(1=2;"a";"b")    cell    s:b control
159SYN.sum.control =SUM(1) cell    1   control
160SYN.sum.trail   =SUM(1;)    cell    -   compile behaviour only
161SYN.sum.lead    =SUM(;1)    cell    -   compile behaviour only
162SYN.sum.empty   =SUM()  cell    -   compile behaviour only
163SYN.sum.mid =SUM(1;;2)  cell    -   compile behaviour only
164SYN.semi    =(;)    cell    -   compile behaviour only
165SYN.parens  =() cell    -   compile behaviour only
166SYN.inline.trail    ={1;}   cell    -   compile behaviour only (inline array with empty element)
167SYN.sum.space   =SUM (1)    cell    -   whitespace before parenthesis; compile behaviour and read-back only
168VLOOKUP.range.exact.cell    =VLOOKUP(30;D1:F5;2;0)  cell    33  6.14.12 VLOOKUP exact, range source
169VLOOKUP.range.exact.arr =VLOOKUP(30;D1:F5;2;0)  array   33  6.14.12 VLOOKUP exact, range source
170VLOOKUP.range.col3.cell =VLOOKUP(30;D1:F5;3;0)  cell    303 6.14.12 VLOOKUP exact, third column
171VLOOKUP.range.col3.arr  =VLOOKUP(30;D1:F5;3;0)  array   303 6.14.12 VLOOKUP exact, third column
172VLOOKUP.range.sorted.cell   =VLOOKUP(35;D1:F5;2)    cell    33  6.14.12 VLOOKUP sorted: largest entry <= lookup
173VLOOKUP.range.sorted.arr    =VLOOKUP(35;D1:F5;2)    array   33  6.14.12 VLOOKUP sorted: largest entry <= lookup
174VLOOKUP.range.nomatch.cell  =VLOOKUP(35;D1:F5;2;0)  cell    #N/A    6.14.12 VLOOKUP exact, no match is #N/A
175VLOOKUP.range.nomatch.arr   =VLOOKUP(35;D1:F5;2;0)  array   #N/A    6.14.12 VLOOKUP exact, no match is #N/A
176VLOOKUP.range.below.cell    =VLOOKUP(5;D1:F5;2) cell    #N/A    6.14.12 VLOOKUP no data <= lookup is #N/A
177VLOOKUP.range.below.arr =VLOOKUP(5;D1:F5;2) array   #N/A    6.14.12 VLOOKUP no data <= lookup is #N/A
178VLOOKUP.inline.exact.cell   =VLOOKUP(30;{10;11|20;22|30;33};2;0)    cell    33  6.14.12 VLOOKUP inline-array source
179VLOOKUP.inline.exact.arr    =VLOOKUP(30;{10;11|20;22|30;33};2;0)    array   33  6.14.12 VLOOKUP inline-array source
180VLOOKUP.inline.sorted.cell  =VLOOKUP(35;{10;11|20;22|30;33|40;44};2)    cell    33  6.14.12 VLOOKUP inline-array source, sorted
181VLOOKUP.inline.sorted.arr   =VLOOKUP(35;{10;11|20;22|30;33|40;44};2)    array   33  6.14.12 VLOOKUP inline-array source, sorted
182VLOOKUP.nested.exact.cell   =VLOOKUP(30;D1:E5*1;2;0)    cell    33  6.14.12 VLOOKUP nested-expression source (ForceArray)
183VLOOKUP.nested.exact.arr    =VLOOKUP(30;D1:E5*1;2;0)    array   33  6.14.12 VLOOKUP nested-expression source (ForceArray)
184HLOOKUP.range.exact.cell    =HLOOKUP(30;H1:L3;2;0)  cell    33  6.14.5 HLOOKUP exact, range source
185HLOOKUP.range.exact.arr =HLOOKUP(30;H1:L3;2;0)  array   33  6.14.5 HLOOKUP exact, range source
186HLOOKUP.range.row3.cell =HLOOKUP(30;H1:L3;3;0)  cell    303 6.14.5 HLOOKUP exact, third row
187HLOOKUP.range.row3.arr  =HLOOKUP(30;H1:L3;3;0)  array   303 6.14.5 HLOOKUP exact, third row
188HLOOKUP.range.sorted.cell   =HLOOKUP(35;H1:L3;2)    cell    33  6.14.5 HLOOKUP sorted: largest entry <= lookup
189HLOOKUP.range.sorted.arr    =HLOOKUP(35;H1:L3;2)    array   33  6.14.5 HLOOKUP sorted: largest entry <= lookup
190HLOOKUP.range.nomatch.cell  =HLOOKUP(35;H1:L3;2;0)  cell    #N/A    6.14.5 HLOOKUP exact, no match is #N/A
191HLOOKUP.range.nomatch.arr   =HLOOKUP(35;H1:L3;2;0)  array   #N/A    6.14.5 HLOOKUP exact, no match is #N/A
192HLOOKUP.inline.exact.cell   =HLOOKUP(30;{10;20;30|11;22;33};2;0)    cell    33  6.14.5 HLOOKUP inline-array source
193HLOOKUP.inline.exact.arr    =HLOOKUP(30;{10;20;30|11;22;33};2;0)    array   33  6.14.5 HLOOKUP inline-array source
194HLOOKUP.inline.sorted.cell  =HLOOKUP(35;{10;20;30;40|11;22;33;44};2)    cell    33  6.14.5 HLOOKUP inline-array source, sorted
195HLOOKUP.inline.sorted.arr   =HLOOKUP(35;{10;20;30;40|11;22;33;44};2)    array   33  6.14.5 HLOOKUP inline-array source, sorted
196HLOOKUP.nested.exact.cell   =HLOOKUP(30;H1:L2*1;2;0)    cell    33  6.14.5 HLOOKUP nested-expression source (ForceArray)
197HLOOKUP.nested.exact.arr    =HLOOKUP(30;H1:L2*1;2;0)    array   33  6.14.5 HLOOKUP nested-expression source (ForceArray)
198MATCH.range.exact.cell  =MATCH(30;D1:D5;0)  cell    3   6.14.9 MATCH exact, column range
199MATCH.range.exact.arr   =MATCH(30;D1:D5;0)  array   3   6.14.9 MATCH exact, column range
200MATCH.range.sorted.cell =MATCH(35;D1:D5)    cell    3   6.14.9 MATCH MatchType 1: largest value <= search
201MATCH.range.sorted.arr  =MATCH(35;D1:D5)    array   3   6.14.9 MATCH MatchType 1: largest value <= search
202MATCH.range.nomatch.cell    =MATCH(35;D1:D5;0)  cell    #N/A    6.14.9 MATCH exact, no match is #N/A
203MATCH.range.nomatch.arr =MATCH(35;D1:D5;0)  array   #N/A    6.14.9 MATCH exact, no match is #N/A
204MATCH.row.exact.cell    =MATCH(30;H1:L1;0)  cell    3   6.14.9 MATCH exact, row range
205MATCH.row.exact.arr =MATCH(30;H1:L1;0)  array   3   6.14.9 MATCH exact, row range
206MATCH.inline.row.cell   =MATCH(30;{10;20;30;40};0)  cell    3   6.14.9 MATCH inline-array row source
207MATCH.inline.row.arr    =MATCH(30;{10;20;30;40};0)  array   3   6.14.9 MATCH inline-array row source
208MATCH.inline.col.cell   =MATCH(30;{10|20|30|40};0)  cell    3   6.14.9 MATCH inline-array column source
209MATCH.inline.col.arr    =MATCH(30;{10|20|30|40};0)  array   3   6.14.9 MATCH inline-array column source
210MATCH.nested.and.cell   =MATCH(1;(A1:A9="x")*(B1:B9="y");0) cell    3   6.14.9 MATCH nested-expression source: first row with A=x and B=y
211MATCH.nested.and.arr    =MATCH(1;(A1:A9="x")*(B1:B9="y");0) array   3   6.14.9 MATCH nested-expression source: first row with A=x and B=y
212MATCH.nested.mul.cell   =MATCH(30;D1:D5*1;0)    cell    3   6.14.9 MATCH nested-expression source
213MATCH.nested.mul.arr    =MATCH(30;D1:D5*1;0)    array   3   6.14.9 MATCH nested-expression source
214MATCH.nested.sorted.cell    =MATCH(35;D1:D5*1;1)    cell    3   6.14.9 MATCH nested-expression source, MatchType 1
215MATCH.nested.sorted.arr =MATCH(35;D1:D5*1;1)    array   3   6.14.9 MATCH nested-expression source, MatchType 1
216ISECT.abs.row3  =ABS(D1:D5) cell@3  30  3.3 1.2.2: column-vector range in scalar parameter, intersect formula row 3
217ISECT.abs.row7  =ABS(D1:D5) cell@7  #ERR    3.3 note 4: no intersection gives #N/A or a more specific Error
218ISECT.match.row4    =MATCH(D1:D5;D1:D5;0)   cell@4  4   Search is Scalar: implicit intersection gives D4=40, position 4
219ISECT.match.row2    =MATCH(D1:D5;D1:D5;0)   cell@2  2   Search is Scalar: implicit intersection gives D2=20, position 2
220ISECT.match.row7    =MATCH(D1:D5;D1:D5;0)   cell@7  #ERR    no intersection at row 7: #N/A or a more specific Error
221ISECT.vlookup.row2  =VLOOKUP(D1:D5;D1:F5;2;0)   cell@2  22  Lookup is Any, not ForceArray: intersection D2=20, then column 2 = 22
222LINEST.range.cell   =LINEST(N1:N6;O1:O6)    cell    2.28571428571   6.18.41 LINEST: plain cell shows element (0;0) by 3.2.2/3.3 1.1 = slope
223LINEST.range.arr    =LINEST(N1:N6;O1:O6)    array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST: slope, intercept
224LINEST.range.stats  =LINEST(N1:N6;O1:O6;1;1)    array:2x5   2.28571428571|0.666666666667|0.164957219768|0.64241607444|0.979591836735|0.690065559342|192|4|91.4285714286|1.90476190476   6.18.41 LINEST Table 29 with Stats TRUE, values from the 1.3 formulas
225LINEST.range.statscell  =LINEST(N1:N6;O1:O6;1;1)    cell    2.28571428571   6.18.41 LINEST: plain cell with Stats shows element (0;0)
226LINEST.nox.cell =LINEST(N1:N6)  cell    2.28571428571   6.18.41 LINEST: KnownX omitted = 1,2,3,...
227LINEST.nox.arr  =LINEST(N1:N6)  array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST: KnownX omitted = 1,2,3,...
228LINEST.emptyx.arr   =LINEST(N1:N6;;1;0) array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST: KnownX empty parameter = 1,2,3,...
229LINEST.noconst.cell =LINEST(N1:N6;O1:O6;0)  cell    2.43956043956   6.18.41 LINEST: Const FALSE, slope through origin
230LINEST.noconst.arr  =LINEST(N1:N6;O1:O6;0)  array:2x1   2.43956043956|0 6.18.41 LINEST: Const FALSE, a = 0
231LINEST.inline.cell  =LINEST({3;5;8;9;13;14};{1;2;3;4;5;6})  cell    2.28571428571   6.18.41 LINEST inline-array sources
232LINEST.inline.arr   =LINEST({3;5;8;9;13;14};{1;2;3;4;5;6})  array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST inline-array sources
233LINEST.nested.cell  =LINEST(N1:N6*1;O1:O6*1)    cell    2.28571428571   6.18.41 LINEST nested-expression sources (ForceArray)
234LINEST.nested.arr   =LINEST(N1:N6*1;O1:O6*1)    array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST nested-expression sources (ForceArray)
235LINEST.k2.const =LINEST({3;5};{1;2})    cell    #ERR    KNOWN DEVIATION, kept on purpose: AOO allows zero degrees of freedom (two-point regression); 6.18.41 LINEST: Const TRUE and k <= n+1 (k=2, n=1) returns an error
236LINEST.k1.noconst   =LINEST({3};{1};0)  cell    #ERR    KNOWN DEVIATION, kept on purpose: AOO allows zero degrees of freedom (two-point regression); 6.18.41 LINEST: Const FALSE and k <= n (k=1, n=1) returns an error
237LINEST.k2.noconst   =LINEST({3;5};{1;2};0)  cell    2.6 6.18.41 LINEST: Const FALSE, k=2 > n=1 is valid, slope through origin
238LINEST.k3.cell  =LINEST({3;5;8};{1;2;3})    cell    2.5 6.18.41 LINEST: k=3 > n+1, valid
239LINEST.constmissing =LINEST(N1:N6;O1:O6;)   cell    -   empty Const parameter is not in the 1.3 syntax; current behaviour only
240LINEST.nonnum   =LINEST({3;"a";8};{1;2;3})  cell    #ERR    6.18.41 LINEST: an entry that does not convert to Number is an error
241LOGEST.range.cell   =LOGEST(P1:P6;O1:O6)    cell    1.96506174  6.18.42 LOGEST: plain cell shows element (0;0) = e^b
242LOGEST.range.arr    =LOGEST(P1:P6;O1:O6)    array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST: e^b, e^a
243LOGEST.range.stats  =LOGEST(P1:P6;O1:O6;1;1)    array:2x5   -   6.18.42 LOGEST with Stats: statistics of the linearized fit not recomputed here; current behaviour only
244LOGEST.nox.cell =LOGEST(P1:P6)  cell    1.96506174  6.18.42 LOGEST: KnownX omitted = 1,2,3,...
245LOGEST.nox.arr  =LOGEST(P1:P6)  array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST: KnownX omitted = 1,2,3,...
246LOGEST.inline.cell  =LOGEST({2;4;7;15;30;58};{1;2;3;4;5;6}) cell    1.96506174  6.18.42 LOGEST inline-array sources
247LOGEST.inline.arr   =LOGEST({2;4;7;15;30;58};{1;2;3;4;5;6}) array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST inline-array sources
248LOGEST.nested.cell  =LOGEST(P1:P6*1;O1:O6*1)    cell    1.96506174  6.18.42 LOGEST nested-expression sources (ForceArray)
249LOGEST.nested.arr   =LOGEST(P1:P6*1;O1:O6*1)    array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST nested-expression sources (ForceArray)
250LOGEST.negy =LOGEST({3;-5;8};{1;2;3})   cell    #ERR    6.18.42 LOGEST: a negative entry in KnownY is an error
251FTEST.11_3.cell =FTEST(AH1:AH11;AI1:AI3)    cell    0.8364238848    6.18.30 FTEST: n1=11, n2=3, s1^2/s2^2=1.05, 2*min(Ptail,1-Ptail)
252FTEST.11_3.arr  =FTEST(AH1:AH11;AI1:AI3)    array   0.8364238848    6.18.30 FTEST: n1=11, n2=3, s1^2/s2^2=1.05
253FTEST.3_11.cell =FTEST(AI1:AI3;AH1:AH11)    cell    0.8364238848    6.18.30 FTEST: arguments swapped, ratio 1/1.05, F(2,10)
254FTEST.equal.cell    =FTEST(AJ1:AJ4;AK1:AK4) cell    1   6.18.30 FTEST: identical data, ratio 1, Ptail=0.5, result 1
255FTEST.inline.cell   =FTEST({6;6;6;6;3;2;1;2;6;4;2};{1;3;5}) cell    0.8364238848    6.18.30 FTEST inline-array sources, same data as FTEST.11_3
256FTEST.nested.cell   =FTEST(AH1:AH11*1;AI1:AI3*1)    cell    0.8364238848    6.18.30 FTEST nested-expression sources, same data
257FTEST.one   =FTEST(AI1:AI1;AI1:AI3) cell    -   constraint (at least 2 numbers) violated; the Error is not stated for constraint violations here
258FTEST.zerovar   =FTEST({1;1;1};{1;3;5}) cell    -   constraint (nonzero variances) violated; the Error is not stated
259DAYS360.us.false    =DAYS360(DATE(2024;2;29);DATE(2024;3;31);FALSE) cell    30  6.10.7 DAYS360: US method, start last day of Feb becomes 30, end 31 becomes 30
260DAYS360.eu.true =DAYS360(DATE(2024;2;29);DATE(2024;3;31);TRUE)  cell    31  6.10.7 DAYS360: European method, Feb days never changed, end 31 becomes 30
261DAYS360.omit    =DAYS360(DATE(2024;2;29);DATE(2024;3;31))   cell    30  6.10.7 DAYS360: Method defaults to FALSE
262DAYS360.swap.true   =DAYS360(DATE(2024;3;31);DATE(2024;2;29);TRUE)  cell    -31 6.10.7 DAYS360: European method swaps dates, sign -1
263DAYS360.swap.false  =DAYS360(DATE(2024;3;31);DATE(2024;2;29);FALSE) cell    -31 6.10.7 DAYS360: US method never swaps
264DAYS360.feb23.false =DAYS360(DATE(2023;2;28);DATE(2023;3;31);FALSE) cell    30  6.10.7 DAYS360: US method, 28 Feb 2023 is last day of Feb -> 30
265DAYS360.feb23.true  =DAYS360(DATE(2023;2;28);DATE(2023;3;31);TRUE)  cell    32  6.10.7 DAYS360: European method, 28 stays
266DAYS360.num0    =DAYS360(DATE(2024;2;29);DATE(2024;3;31);0) cell    -   Method as a number: conversion not exercised by the 1.3 text here
267DAYS360.num1    =DAYS360(DATE(2024;2;29);DATE(2024;3;31);1) cell    -   Method as a number: conversion not exercised by the 1.3 text here
268CELL.addr.other =CELL("ADDRESS";$Other.B2)  cell    -   6.13.3: sheet name included for another sheet; the text form is not specified
269CELL.addr.other.range   =CELL("ADDRESS";$Other.B2:C3)   cell    -   6.13.3: top-left cell of the range; text form not specified
270CELL.addr.same  =CELL("ADDRESS";B2) cell    -   6.13.3: same sheet, no sheet name; text form not specified
271CELL.col.other  =CELL("COL";$Other.B2)  cell    2   6.13.3 Table 17: column number
272CELL.row.other  =CELL("ROW";$Other.B2)  cell    2   6.13.3 Table 17: row number
273CELL.sheet.other    =CELL("SHEET";$Other.B2)    cell    -   6.13.3 Table 17: sheet number; numbering base not stated
274BESSELK.x0  =BESSELK(0;1)   cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
275BESSELK.xm1 =BESSELK(-1;1)  cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
276BESSELK.xm0p5   =BESSELK(-0.5;1)    cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
277BESSELK.n0.x0   =BESSELK(0;0)   cell    -   constraint X <> 0 violated
278BESSELY.x0  =BESSELY(0;1)   cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
279BESSELY.xm1 =BESSELY(-1;1)  cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
280BESSELY.xm0p5   =BESSELY(-0.5;1)    cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
281BESSELY.n0.x0   =BESSELY(0;0)   cell    -   constraint X <> 0 violated
282BESSELK.ctl.K0  =BESSELK(1;0)   cell    ~0.421024438241 control: K0(1), integral definition evaluated numerically; ~ = relative tolerance 1e-6 (the build is accurate to about 1e-8)
283BESSELK.ctl.K1  =BESSELK(1;1)   cell    ~0.601907230197 control: K1(1); ~ tolerance
284BESSELY.ctl.Y0  =BESSELY(1;0)   cell    ~0.0882569642157    control: Y0(1); ~ tolerance
285BESSELY.ctl.Y1  =BESSELY(1;1)   cell    ~-0.7812128213  control: Y1(1); ~ tolerance
286FARR.sumprod.match  =SUMPRODUCT(--ISNUMBER(MATCH(D1:D5;D1:D5;0)))   cell    5   ForceArray context of SUMPRODUCT reaches the scalar parameter of MATCH (must keep working in a plain cell)
287FARR.sumprod.vlookup    =SUMPRODUCT(VLOOKUP(D1:D3;D1:E5;2;0))   cell    66  same for VLOOKUP: 11+22+33
288FARR.sumprod.abs    =SUMPRODUCT(ABS(D1:D3)) cell    60  control without lookup function
289
290# ODF 1.4 Part 4 changes: EASTERSUNDAY without a year and with a year range, CONVERT SI_at, the IS* family on errors, DAYS, SECOND/MINUTE rounding,
291# the 1583 year limit, INDEX on row and column vectors. Columns as above.
292EASTER.1583 =EASTERSUNDAY(1583)-DATE(1583;4;10) cell    0   6.10.8 EASTERSUNDAY: lower bound of the allowed range
293EASTER.1900 =EASTERSUNDAY(1900)-DATE(1900;4;15) cell    0   6.10.8 algorithm
294EASTER.2000 =EASTERSUNDAY(2000)-DATE(2000;4;23) cell    0   6.10.8 algorithm
295EASTER.2024 =EASTERSUNDAY(2024)-DATE(2024;3;31) cell    0   6.10.8 algorithm
296EASTER.2025 =EASTERSUNDAY(2025)-DATE(2025;4;20) cell    0   6.10.8 algorithm
297EASTER.9956 =EASTERSUNDAY(9956)-DATE(9956;4;22) cell    0   6.10.8 upper bound of the allowed range
298EASTER.low  =EASTERSUNDAY(1582) cell    #ERR    6.10.8 constraint 1583 <= Year
299EASTER.high =EASTERSUNDAY(9957) cell    #ERR    6.10.8 constraint Year <= 9956
300EASTER.noarg    =IF(EASTERSUNDAY()>=TODAY();1;0)    cell    1   6.10.8 without Year: the next Easter Sunday on or after TODAY()
301EASTER.noarg.dist   =EASTERSUNDAY()-TODAY() cell    -   6.10.8 without Year: distance is recorded only (it depends on the day the test runs)
302CONVERT.atm =CONVERT(1;"atm";"Pa")  cell    101325.1    6.16.18 Table 24: atm is the Standard atmosphere, 1.0132510E+5 Pa
303CONVERT.SI_at   =CONVERT(1;"SI_at";"Pa")    cell    98066.5 6.16.18 Table 24: SI_at is the Technical atmosphere, 9.8066510E+4 Pa
304CONVERT.at  =CONVERT(1;"at";"Pa")   cell    -   6.16.18 Table 24: at is deprecated, recorded only
305NPER.omit   =NPER(0.01;-100;1000)-NPER(0.01;-100;1000;0;0)  cell    0   6.12.29 Fv and PayType default to 0
306NPER.empty  =NPER(0.01;-100;1000;;)-NPER(0.01;-100;1000;0;0)    cell    0   6.12.29 empty Fv and PayType take the defaults; known deviation: the formula compiler rejects an empty last parameter before ')' for every function except IF (Err:511)
307NPER.paytype1   =NPER(0.01;-100;1000;0;1)-NPER(0.01;-100;1000;0;0)  cell    -   6.12.29 PayType 1 differs; recorded only
308INDEX.col.row   =INDEX(D1:D5;2) cell    20  6.14.6 column vector, Row only: the entire row of the area
309INDEX.col.rowcol    =INDEX(D1:D5;2;1)   cell    20  6.14.6 column vector, Row and Column
310INDEX.row.col   =INDEX(D1:F1;1;3)   cell    101 6.14.6 row vector, Row and Column
311INDEX.row.rowonly   =INDEX(H1:L1;3) cell    #ERR    6.14.6 (1.4) row vector with Row = 3 > 1 row: an Error; 1.3 let Row act as the column offset
312INDEX.row.empty =INDEX(H1:L1;;3)    cell    30  6.14.6 row vector, Column only
313INDEX.col.beyond    =INDEX(D1:D5;2;2)   cell    #ERR    6.14.6 Column greater than the dimension of the area is an Error
314ISBLANK.err =ISBLANK(NA())  cell    0   6.13.14 an Error argument returns FALSE
315ISBLANK.err2    =ISBLANK(1/0)   cell    0   6.13.14 an Error argument returns FALSE
316ISLOGICAL.err   =ISLOGICAL(NA())    cell    0   6.13.19 an Error argument returns FALSE
317ISLOGICAL.err2  =ISLOGICAL(1/0) cell    0   6.13.19 an Error argument returns FALSE
318ISNUMBER.err    =ISNUMBER(NA()) cell    0   6.13.22 an Error argument returns FALSE
319ISNUMBER.err2   =ISNUMBER(1/0)  cell    0   6.13.22 an Error argument returns FALSE
320ISTEXT.err  =ISTEXT(NA())   cell    0   6.13.25 an Error argument returns FALSE
321ISTEXT.err2 =ISTEXT(1/0)    cell    0   6.13.25 an Error argument returns FALSE
322ISNONTEXT.err   =ISNONTEXT(NA())    cell    1   6.13.21 an Error argument returns TRUE
323ISNONTEXT.err2  =ISNONTEXT(1/0) cell    1   6.13.21 an Error argument returns TRUE
324ISBLANK.ref =ISBLANK(AB1)   cell    1   6.13.14 unchanged: a reference to an empty cell
325DAYS.num    =DAYS(DATE(2024;3;10);DATE(2024;3;1))   cell    9   6.10.6 Numbers: EndDate - StartDate
326DAYS.text   =DAYS("2024-03-10";"2024-03-01")    cell    9   6.10.6 (1.4) Text: DATEVALUE(EndDate) - DATEVALUE(StartDate); 1.3 had the operands the other way round (-9)
327SECOND.round.up =SECOND(TIME(0;0;59)+0.6/86400) cell    0   6.10.17 (1.4) T is rounded to the nearest second first: 59.6 s is 60 s, second 0
328MINUTE.round.up =MINUTE(TIME(0;0;59)+0.6/86400) cell    1   6.10.13 (1.4) the same rounding carries into the minute
329SECOND.round.down   =SECOND(TIME(0;0;59)+0.4/86400) cell    59  6.10.17 59.4 s rounds to 59
330SECOND.plain    =SECOND(TIME(1;2;3))    cell    3   6.10.17 an exact time
331MINUTE.plain    =MINUTE(TIME(1;2;3))    cell    2   6.10.13 an exact time
332LEAP.1900   =DATE(1900;3;1)-DATE(1900;2;28) cell    1   7.4 1900 was not a leap year
333LEAP.2000   =DATE(2000;3;1)-DATE(2000;2;28) cell    2   7.4 2000 was a leap year
334LEAP.2100   =DATE(2100;3;1)-DATE(2100;2;28) cell    1   7.4 2100 is not a leap year
335Y1583.jan1  =DATE(1583;1;2)-DATE(1583;1;1)  cell    1   7.4 dates from 1 January 1583 are calculated
336Y1500.leap  =DATE(1500;3;1)-DATE(1500;2;28) cell    -   7.4 before 1583 the system is implementation-defined (proleptic Gregorian: 1, Julian: 2)
337Y1582.switch    =DATE(1582;10;15)-DATE(1582;10;4)   cell    -   7.4 proleptic Gregorian gives 11, a Julian-to-Gregorian switch gives 1
338CONVERT.g.kg    =CONVERT(1;"g";"kg")    cell    0.001   control: the add-in rewrite reaches a known unit pair
339CONVERT.bogus   =CONVERT(1;"nosuchunit";"Pa")   cell    #ERR    control: an unknown unit is an error
340EASTER.mid  =EASTERSUNDAY(1000) cell    #ERR    6.10.8 constraint 1583 <= Year (100 to 1582)
341EASTER.neg  =EASTERSUNDAY(-1)   cell    #ERR    6.10.8 constraint 1583 <= Year (negative years used to wrap)
342EASTER.wrap =EASTERSUNDAY(67536)    cell    #ERR    6.10.8 constraint Year <= 9956 (67536 used to wrap to 2000)
343