xref: /trunk/test/odf-validate/calcval-cases.tsv (revision 0e16a31d78a652c56c5c0fc79c752f48b9048df9)
1# calcval cases for calcval.py.  Columns (tab separated): id, formula, mode, expected, note.
2# formula: AOO API syntax (English function names, ';' separators, '|' row separator in inline arrays), leading '='.
3# 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).
4# 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.
5# RECEIVED, BESSELK, BESSELY are Analysis add-in functions: calcval.py rewrites them to their programmatic names.
6# Expected values come from the public ODF 1.3 Part 4 text (OpenDocument-v1.3-os-part4-formula).
7#
8# Data written by calcval.py on sheet 1 (second sheet is named Other):
9#   A1:A9  y,x,x,y,x,y,x,x,y            B1:B9  y,x,y,y,y,y,x,y,x
10#   D1:F5  D=10,20,30,40,50  E=11,22,33,44,55  F=101,202,303,404,505
11#   H1:L3  row1 10,20,30,40,50  row2 11,22,33,44,55  row3 101,202,303,404,505
12#   N1:N6  3,5,8,9,13,14 (y)   O1:O6  1..6 (x)   P1:P6  2,4,7,15,30,58 (positive y)
13#   R1:T6  database: header Name,Age,Score; A,20,5; B,30,"n/a"; C,40,15; D,50,(empty); E,60,25
14#   V1:V2  criteria Age,">=30"   W1:W2  criteria Age,(empty)   Y1:Y2  criteria Name,"A"
15#   AH1:AH11 6,6,6,6,3,2,1,2,6,4,2 (variance 4.2)   AI1:AI3 1,3,5 (variance 4)
16#   AJ1:AJ4 and AK1:AK4  2,4,7,9
17#   Scratch area AA1:AF12 is cleared after every case.
18WEEKDAY.Sun.1   =WEEKDAY(DATE(2024;1;7);1)  cell    1   Part 4 6.10.20 Table 6, Sunday type 1
19WEEKDAY.Sun.2   =WEEKDAY(DATE(2024;1;7);2)  cell    7   Part 4 6.10.20 Table 6, Sunday type 2
20WEEKDAY.Sun.3   =WEEKDAY(DATE(2024;1;7);3)  cell    6   Part 4 6.10.20 Table 6, Sunday type 3
21WEEKDAY.Sun.11  =WEEKDAY(DATE(2024;1;7);11) cell    7   Part 4 6.10.20 Table 6, Sunday type 11
22WEEKDAY.Sun.12  =WEEKDAY(DATE(2024;1;7);12) cell    6   Part 4 6.10.20 Table 6, Sunday type 12
23WEEKDAY.Sun.13  =WEEKDAY(DATE(2024;1;7);13) cell    5   Part 4 6.10.20 Table 6, Sunday type 13
24WEEKDAY.Sun.14  =WEEKDAY(DATE(2024;1;7);14) cell    4   Part 4 6.10.20 Table 6, Sunday type 14
25WEEKDAY.Sun.15  =WEEKDAY(DATE(2024;1;7);15) cell    3   Part 4 6.10.20 Table 6, Sunday type 15
26WEEKDAY.Sun.16  =WEEKDAY(DATE(2024;1;7);16) cell    2   Part 4 6.10.20 Table 6, Sunday type 16
27WEEKDAY.Sun.17  =WEEKDAY(DATE(2024;1;7);17) cell    1   Part 4 6.10.20 Table 6, Sunday type 17
28WEEKDAY.Mon.1   =WEEKDAY(DATE(2024;1;8);1)  cell    2   Part 4 6.10.20 Table 6, Monday type 1
29WEEKDAY.Mon.2   =WEEKDAY(DATE(2024;1;8);2)  cell    1   Part 4 6.10.20 Table 6, Monday type 2
30WEEKDAY.Mon.3   =WEEKDAY(DATE(2024;1;8);3)  cell    0   Part 4 6.10.20 Table 6, Monday type 3
31WEEKDAY.Mon.11  =WEEKDAY(DATE(2024;1;8);11) cell    1   Part 4 6.10.20 Table 6, Monday type 11
32WEEKDAY.Mon.12  =WEEKDAY(DATE(2024;1;8);12) cell    7   Part 4 6.10.20 Table 6, Monday type 12
33WEEKDAY.Mon.13  =WEEKDAY(DATE(2024;1;8);13) cell    6   Part 4 6.10.20 Table 6, Monday type 13
34WEEKDAY.Mon.14  =WEEKDAY(DATE(2024;1;8);14) cell    5   Part 4 6.10.20 Table 6, Monday type 14
35WEEKDAY.Mon.15  =WEEKDAY(DATE(2024;1;8);15) cell    4   Part 4 6.10.20 Table 6, Monday type 15
36WEEKDAY.Mon.16  =WEEKDAY(DATE(2024;1;8);16) cell    3   Part 4 6.10.20 Table 6, Monday type 16
37WEEKDAY.Mon.17  =WEEKDAY(DATE(2024;1;8);17) cell    2   Part 4 6.10.20 Table 6, Monday type 17
38WEEKDAY.Tue.1   =WEEKDAY(DATE(2024;1;9);1)  cell    3   Part 4 6.10.20 Table 6, Tuesday type 1
39WEEKDAY.Tue.2   =WEEKDAY(DATE(2024;1;9);2)  cell    2   Part 4 6.10.20 Table 6, Tuesday type 2
40WEEKDAY.Tue.3   =WEEKDAY(DATE(2024;1;9);3)  cell    1   Part 4 6.10.20 Table 6, Tuesday type 3
41WEEKDAY.Tue.11  =WEEKDAY(DATE(2024;1;9);11) cell    2   Part 4 6.10.20 Table 6, Tuesday type 11
42WEEKDAY.Tue.12  =WEEKDAY(DATE(2024;1;9);12) cell    1   Part 4 6.10.20 Table 6, Tuesday type 12
43WEEKDAY.Tue.13  =WEEKDAY(DATE(2024;1;9);13) cell    7   Part 4 6.10.20 Table 6, Tuesday type 13
44WEEKDAY.Tue.14  =WEEKDAY(DATE(2024;1;9);14) cell    6   Part 4 6.10.20 Table 6, Tuesday type 14
45WEEKDAY.Tue.15  =WEEKDAY(DATE(2024;1;9);15) cell    5   Part 4 6.10.20 Table 6, Tuesday type 15
46WEEKDAY.Tue.16  =WEEKDAY(DATE(2024;1;9);16) cell    4   Part 4 6.10.20 Table 6, Tuesday type 16
47WEEKDAY.Tue.17  =WEEKDAY(DATE(2024;1;9);17) cell    3   Part 4 6.10.20 Table 6, Tuesday type 17
48WEEKDAY.Wed.1   =WEEKDAY(DATE(2024;1;10);1) cell    4   Part 4 6.10.20 Table 6, Wednesday type 1
49WEEKDAY.Wed.2   =WEEKDAY(DATE(2024;1;10);2) cell    3   Part 4 6.10.20 Table 6, Wednesday type 2
50WEEKDAY.Wed.3   =WEEKDAY(DATE(2024;1;10);3) cell    2   Part 4 6.10.20 Table 6, Wednesday type 3
51WEEKDAY.Wed.11  =WEEKDAY(DATE(2024;1;10);11)    cell    3   Part 4 6.10.20 Table 6, Wednesday type 11
52WEEKDAY.Wed.12  =WEEKDAY(DATE(2024;1;10);12)    cell    2   Part 4 6.10.20 Table 6, Wednesday type 12
53WEEKDAY.Wed.13  =WEEKDAY(DATE(2024;1;10);13)    cell    1   Part 4 6.10.20 Table 6, Wednesday type 13
54WEEKDAY.Wed.14  =WEEKDAY(DATE(2024;1;10);14)    cell    7   Part 4 6.10.20 Table 6, Wednesday type 14
55WEEKDAY.Wed.15  =WEEKDAY(DATE(2024;1;10);15)    cell    6   Part 4 6.10.20 Table 6, Wednesday type 15
56WEEKDAY.Wed.16  =WEEKDAY(DATE(2024;1;10);16)    cell    5   Part 4 6.10.20 Table 6, Wednesday type 16
57WEEKDAY.Wed.17  =WEEKDAY(DATE(2024;1;10);17)    cell    4   Part 4 6.10.20 Table 6, Wednesday type 17
58WEEKDAY.Thu.1   =WEEKDAY(DATE(2024;1;11);1) cell    5   Part 4 6.10.20 Table 6, Thursday type 1
59WEEKDAY.Thu.2   =WEEKDAY(DATE(2024;1;11);2) cell    4   Part 4 6.10.20 Table 6, Thursday type 2
60WEEKDAY.Thu.3   =WEEKDAY(DATE(2024;1;11);3) cell    3   Part 4 6.10.20 Table 6, Thursday type 3
61WEEKDAY.Thu.11  =WEEKDAY(DATE(2024;1;11);11)    cell    4   Part 4 6.10.20 Table 6, Thursday type 11
62WEEKDAY.Thu.12  =WEEKDAY(DATE(2024;1;11);12)    cell    3   Part 4 6.10.20 Table 6, Thursday type 12
63WEEKDAY.Thu.13  =WEEKDAY(DATE(2024;1;11);13)    cell    2   Part 4 6.10.20 Table 6, Thursday type 13
64WEEKDAY.Thu.14  =WEEKDAY(DATE(2024;1;11);14)    cell    1   Part 4 6.10.20 Table 6, Thursday type 14
65WEEKDAY.Thu.15  =WEEKDAY(DATE(2024;1;11);15)    cell    7   Part 4 6.10.20 Table 6, Thursday type 15
66WEEKDAY.Thu.16  =WEEKDAY(DATE(2024;1;11);16)    cell    6   Part 4 6.10.20 Table 6, Thursday type 16
67WEEKDAY.Thu.17  =WEEKDAY(DATE(2024;1;11);17)    cell    5   Part 4 6.10.20 Table 6, Thursday type 17
68WEEKDAY.Fri.1   =WEEKDAY(DATE(2024;1;12);1) cell    6   Part 4 6.10.20 Table 6, Friday type 1
69WEEKDAY.Fri.2   =WEEKDAY(DATE(2024;1;12);2) cell    5   Part 4 6.10.20 Table 6, Friday type 2
70WEEKDAY.Fri.3   =WEEKDAY(DATE(2024;1;12);3) cell    4   Part 4 6.10.20 Table 6, Friday type 3
71WEEKDAY.Fri.11  =WEEKDAY(DATE(2024;1;12);11)    cell    5   Part 4 6.10.20 Table 6, Friday type 11
72WEEKDAY.Fri.12  =WEEKDAY(DATE(2024;1;12);12)    cell    4   Part 4 6.10.20 Table 6, Friday type 12
73WEEKDAY.Fri.13  =WEEKDAY(DATE(2024;1;12);13)    cell    3   Part 4 6.10.20 Table 6, Friday type 13
74WEEKDAY.Fri.14  =WEEKDAY(DATE(2024;1;12);14)    cell    2   Part 4 6.10.20 Table 6, Friday type 14
75WEEKDAY.Fri.15  =WEEKDAY(DATE(2024;1;12);15)    cell    1   Part 4 6.10.20 Table 6, Friday type 15
76WEEKDAY.Fri.16  =WEEKDAY(DATE(2024;1;12);16)    cell    7   Part 4 6.10.20 Table 6, Friday type 16
77WEEKDAY.Fri.17  =WEEKDAY(DATE(2024;1;12);17)    cell    6   Part 4 6.10.20 Table 6, Friday type 17
78WEEKDAY.Sat.1   =WEEKDAY(DATE(2024;1;13);1) cell    7   Part 4 6.10.20 Table 6, Saturday type 1
79WEEKDAY.Sat.2   =WEEKDAY(DATE(2024;1;13);2) cell    6   Part 4 6.10.20 Table 6, Saturday type 2
80WEEKDAY.Sat.3   =WEEKDAY(DATE(2024;1;13);3) cell    5   Part 4 6.10.20 Table 6, Saturday type 3
81WEEKDAY.Sat.11  =WEEKDAY(DATE(2024;1;13);11)    cell    6   Part 4 6.10.20 Table 6, Saturday type 11
82WEEKDAY.Sat.12  =WEEKDAY(DATE(2024;1;13);12)    cell    5   Part 4 6.10.20 Table 6, Saturday type 12
83WEEKDAY.Sat.13  =WEEKDAY(DATE(2024;1;13);13)    cell    4   Part 4 6.10.20 Table 6, Saturday type 13
84WEEKDAY.Sat.14  =WEEKDAY(DATE(2024;1;13);14)    cell    3   Part 4 6.10.20 Table 6, Saturday type 14
85WEEKDAY.Sat.15  =WEEKDAY(DATE(2024;1;13);15)    cell    2   Part 4 6.10.20 Table 6, Saturday type 15
86WEEKDAY.Sat.16  =WEEKDAY(DATE(2024;1;13);16)    cell    1   Part 4 6.10.20 Table 6, Saturday type 16
87WEEKDAY.Sat.17  =WEEKDAY(DATE(2024;1;13);17)    cell    7   Part 4 6.10.20 Table 6, Saturday type 17
88WEEKDAY.Wed.0   =WEEKDAY(DATE(2024;1;10);0) cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
89WEEKDAY.Wed.4   =WEEKDAY(DATE(2024;1;10);4) cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
90WEEKDAY.Wed.10  =WEEKDAY(DATE(2024;1;10);10)    cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
91WEEKDAY.Wed.18  =WEEKDAY(DATE(2024;1;10);18)    cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
92WEEKDAY.Wed.m1  =WEEKDAY(DATE(2024;1;10);-1)    cell    -   type not listed in 1.3 Table 6; spec gives no value or error rule
93WEEKDAY.Wed.2p7 =WEEKDAY(DATE(2024;1;10);2.7)   cell    -   non-integer Type; conversion to Integer is implementation-defined (6.3.6)
94WEEKDAY.Wed.default =WEEKDAY(DATE(2024;1;10))   cell    4   Type omitted defaults to 1 (6.10.20 syntax); Wednesday type 1 = 4
95WEEKDAY.Sat.default =WEEKDAY(DATE(2024;1;13))   cell    7   Type omitted defaults to 1; Saturday = 7
96RECEIVED.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
97RECEIVED.lt.6m  =RECEIVED(DATE(2024;1;1);DATE(2024;7;1);1000;0.05)  cell    1025.64102564   basis 0 YEARFRAC=180/360=0.5
98RECEIVED.eq =RECEIVED(DATE(2024;1;1);DATE(2024;1;1);1000;0.05)  cell    -   Settlement = Maturity violates constraint Settlement < Maturity; no value specified
99RECEIVED.gt =RECEIVED(DATE(2025;1;1);DATE(2024;1;1);1000;0.05)  cell    -   Settlement > Maturity violates constraint Settlement < Maturity; no value specified
100DCOUNT.name.crit    =DCOUNT(R1:T6;"Name";V1:V2) cell    0   Age>=30 matches 4 records; Name is text: COUNT 0, COUNTA 4
101DCOUNT.score.crit   =DCOUNT(R1:T6;"Score";V1:V2)    cell    2   Age>=30 records have Score n/a, 15, empty, 25: COUNT 2, COUNTA 3
102DCOUNT.namecase =DCOUNT(R1:T6;"score";V1:V2)    cell    2   4.11.10: field names should match case-insensitively
103DCOUNT.idx.crit =DCOUNT(R1:T6;3;V1:V2)  cell    2   4.11.10: Number field selects column 3 (Score)
104DCOUNT.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
105DCOUNT.badfield =DCOUNT(R1:T6;9;V1:V2)  cell    #ERR    4.11.10: nonexistent field returns Error
106DCOUNT.badname  =DCOUNT(R1:T6;"Nope";V1:V2) cell    #ERR    4.11.10: nonexistent field name returns Error
107DCOUNT.omit.crit    =DCOUNT(R1:T6;;V1:V2)   cell    4   Field omitted: count of all records satisfying criteria (Age>=30 = 4)
108DCOUNT.omit.name    =DCOUNT(R1:T6;;Y1:Y2)   cell    1   Field omitted, criteria Name=A matches 1 record
109DCOUNT.two.param    =DCOUNT(R1:T6;V1:V2)    cell    -   syntax is D ; [F] ; C, separators required; the two-parameter form is not listed
110DCOUNT.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
111DCOUNTA.name.crit   =DCOUNTA(R1:T6;"Name";V1:V2)    cell    4   Age>=30 matches 4 records; Name is text: COUNT 0, COUNTA 4
112DCOUNTA.score.crit  =DCOUNTA(R1:T6;"Score";V1:V2)   cell    3   Age>=30 records have Score n/a, 15, empty, 25: COUNT 2, COUNTA 3
113DCOUNTA.namecase    =DCOUNTA(R1:T6;"score";V1:V2)   cell    3   4.11.10: field names should match case-insensitively
114DCOUNTA.idx.crit    =DCOUNTA(R1:T6;3;V1:V2) cell    3   4.11.10: Number field selects column 3 (Score)
115DCOUNTA.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
116DCOUNTA.badfield    =DCOUNTA(R1:T6;9;V1:V2) cell    #ERR    4.11.10: nonexistent field returns Error
117DCOUNTA.badname =DCOUNTA(R1:T6;"Nope";V1:V2)    cell    #ERR    4.11.10: nonexistent field name returns Error
118DCOUNTA.omit.crit   =DCOUNTA(R1:T6;;V1:V2)  cell    4   Field omitted: count of all records satisfying criteria (Age>=30 = 4)
119DCOUNTA.omit.name   =DCOUNTA(R1:T6;;Y1:Y2)  cell    1   Field omitted, criteria Name=A matches 1 record
120DCOUNTA.two.param   =DCOUNTA(R1:T6;V1:V2)   cell    -   syntax is D ; [F] ; C, separators required; the two-parameter form is not listed
121DCOUNTA.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
122IF.a.true   =IF(1=1)    cell    1   6.15.4: IfTrue is TRUE (case a); TRUE as number 1
123IF.a.false  =IF(1=2)    cell    0   6.15.4: IfFalse is FALSE (case a); FALSE as number 0
124IF.b.true   =IF(1=1;)   cell    0   6.15.4: IfTrue null is 0 (case b); TRUE as number 1
125IF.b.false  =IF(1=2;)   cell    0   6.15.4: IfFalse is FALSE with 2 parameters (case b); FALSE as number 0
126IF.c.true   =IF(1=1;5)  cell    5   6.15.4: IfTrue (case c); TRUE as number 1
127IF.c.false  =IF(1=2;5)  cell    0   6.15.4: IfFalse is FALSE with 2 parameters (case c); FALSE as number 0
128IF.d.true   =IF(1=1;;)  cell    0   6.15.4: IfTrue null is 0 (case d); TRUE as number 1
129IF.d.false  =IF(1=2;;)  cell    0   6.15.4: IfFalse null is 0 (case d); FALSE as number 0
130IF.e.true   =IF(1=1;;7) cell    0   6.15.4: IfTrue null is 0 (case e); TRUE as number 1
131IF.e.false  =IF(1=2;;7) cell    7   6.15.4: IfFalse (case e); FALSE as number 0
132IF.f.true   =IF(1=1;5;) cell    5   6.15.4: IfTrue (case f); TRUE as number 1
133IF.f.false  =IF(1=2;5;) cell    0   6.15.4: IfFalse null is 0 (case f); FALSE as number 0
134IF.g.true   =IF(1=1;5;7)    cell    5   6.15.4: IfTrue (case g); TRUE as number 1
135IF.g.false  =IF(1=2;5;7)    cell    7   6.15.4: IfFalse (case g); FALSE as number 0
136IF.text.true    =IF(1=1;"a";"b")    cell    s:a control
137IF.text.false   =IF(1=2;"a";"b")    cell    s:b control
138SYN.sum.control =SUM(1) cell    1   control
139SYN.sum.trail   =SUM(1;)    cell    -   compile behaviour only
140SYN.sum.lead    =SUM(;1)    cell    -   compile behaviour only
141SYN.sum.empty   =SUM()  cell    -   compile behaviour only
142SYN.sum.mid =SUM(1;;2)  cell    -   compile behaviour only
143SYN.semi    =(;)    cell    -   compile behaviour only
144SYN.parens  =() cell    -   compile behaviour only
145SYN.inline.trail    ={1;}   cell    -   compile behaviour only (inline array with empty element)
146SYN.sum.space   =SUM (1)    cell    -   whitespace before parenthesis; compile behaviour and read-back only
147VLOOKUP.range.exact.cell    =VLOOKUP(30;D1:F5;2;0)  cell    33  6.14.12 VLOOKUP exact, range source
148VLOOKUP.range.exact.arr =VLOOKUP(30;D1:F5;2;0)  array   33  6.14.12 VLOOKUP exact, range source
149VLOOKUP.range.col3.cell =VLOOKUP(30;D1:F5;3;0)  cell    303 6.14.12 VLOOKUP exact, third column
150VLOOKUP.range.col3.arr  =VLOOKUP(30;D1:F5;3;0)  array   303 6.14.12 VLOOKUP exact, third column
151VLOOKUP.range.sorted.cell   =VLOOKUP(35;D1:F5;2)    cell    33  6.14.12 VLOOKUP sorted: largest entry <= lookup
152VLOOKUP.range.sorted.arr    =VLOOKUP(35;D1:F5;2)    array   33  6.14.12 VLOOKUP sorted: largest entry <= lookup
153VLOOKUP.range.nomatch.cell  =VLOOKUP(35;D1:F5;2;0)  cell    #N/A    6.14.12 VLOOKUP exact, no match is #N/A
154VLOOKUP.range.nomatch.arr   =VLOOKUP(35;D1:F5;2;0)  array   #N/A    6.14.12 VLOOKUP exact, no match is #N/A
155VLOOKUP.range.below.cell    =VLOOKUP(5;D1:F5;2) cell    #N/A    6.14.12 VLOOKUP no data <= lookup is #N/A
156VLOOKUP.range.below.arr =VLOOKUP(5;D1:F5;2) array   #N/A    6.14.12 VLOOKUP no data <= lookup is #N/A
157VLOOKUP.inline.exact.cell   =VLOOKUP(30;{10;11|20;22|30;33};2;0)    cell    33  6.14.12 VLOOKUP inline-array source
158VLOOKUP.inline.exact.arr    =VLOOKUP(30;{10;11|20;22|30;33};2;0)    array   33  6.14.12 VLOOKUP inline-array source
159VLOOKUP.inline.sorted.cell  =VLOOKUP(35;{10;11|20;22|30;33|40;44};2)    cell    33  6.14.12 VLOOKUP inline-array source, sorted
160VLOOKUP.inline.sorted.arr   =VLOOKUP(35;{10;11|20;22|30;33|40;44};2)    array   33  6.14.12 VLOOKUP inline-array source, sorted
161VLOOKUP.nested.exact.cell   =VLOOKUP(30;D1:E5*1;2;0)    cell    33  6.14.12 VLOOKUP nested-expression source (ForceArray)
162VLOOKUP.nested.exact.arr    =VLOOKUP(30;D1:E5*1;2;0)    array   33  6.14.12 VLOOKUP nested-expression source (ForceArray)
163HLOOKUP.range.exact.cell    =HLOOKUP(30;H1:L3;2;0)  cell    33  6.14.5 HLOOKUP exact, range source
164HLOOKUP.range.exact.arr =HLOOKUP(30;H1:L3;2;0)  array   33  6.14.5 HLOOKUP exact, range source
165HLOOKUP.range.row3.cell =HLOOKUP(30;H1:L3;3;0)  cell    303 6.14.5 HLOOKUP exact, third row
166HLOOKUP.range.row3.arr  =HLOOKUP(30;H1:L3;3;0)  array   303 6.14.5 HLOOKUP exact, third row
167HLOOKUP.range.sorted.cell   =HLOOKUP(35;H1:L3;2)    cell    33  6.14.5 HLOOKUP sorted: largest entry <= lookup
168HLOOKUP.range.sorted.arr    =HLOOKUP(35;H1:L3;2)    array   33  6.14.5 HLOOKUP sorted: largest entry <= lookup
169HLOOKUP.range.nomatch.cell  =HLOOKUP(35;H1:L3;2;0)  cell    #N/A    6.14.5 HLOOKUP exact, no match is #N/A
170HLOOKUP.range.nomatch.arr   =HLOOKUP(35;H1:L3;2;0)  array   #N/A    6.14.5 HLOOKUP exact, no match is #N/A
171HLOOKUP.inline.exact.cell   =HLOOKUP(30;{10;20;30|11;22;33};2;0)    cell    33  6.14.5 HLOOKUP inline-array source
172HLOOKUP.inline.exact.arr    =HLOOKUP(30;{10;20;30|11;22;33};2;0)    array   33  6.14.5 HLOOKUP inline-array source
173HLOOKUP.inline.sorted.cell  =HLOOKUP(35;{10;20;30;40|11;22;33;44};2)    cell    33  6.14.5 HLOOKUP inline-array source, sorted
174HLOOKUP.inline.sorted.arr   =HLOOKUP(35;{10;20;30;40|11;22;33;44};2)    array   33  6.14.5 HLOOKUP inline-array source, sorted
175HLOOKUP.nested.exact.cell   =HLOOKUP(30;H1:L2*1;2;0)    cell    33  6.14.5 HLOOKUP nested-expression source (ForceArray)
176HLOOKUP.nested.exact.arr    =HLOOKUP(30;H1:L2*1;2;0)    array   33  6.14.5 HLOOKUP nested-expression source (ForceArray)
177MATCH.range.exact.cell  =MATCH(30;D1:D5;0)  cell    3   6.14.9 MATCH exact, column range
178MATCH.range.exact.arr   =MATCH(30;D1:D5;0)  array   3   6.14.9 MATCH exact, column range
179MATCH.range.sorted.cell =MATCH(35;D1:D5)    cell    3   6.14.9 MATCH MatchType 1: largest value <= search
180MATCH.range.sorted.arr  =MATCH(35;D1:D5)    array   3   6.14.9 MATCH MatchType 1: largest value <= search
181MATCH.range.nomatch.cell    =MATCH(35;D1:D5;0)  cell    #N/A    6.14.9 MATCH exact, no match is #N/A
182MATCH.range.nomatch.arr =MATCH(35;D1:D5;0)  array   #N/A    6.14.9 MATCH exact, no match is #N/A
183MATCH.row.exact.cell    =MATCH(30;H1:L1;0)  cell    3   6.14.9 MATCH exact, row range
184MATCH.row.exact.arr =MATCH(30;H1:L1;0)  array   3   6.14.9 MATCH exact, row range
185MATCH.inline.row.cell   =MATCH(30;{10;20;30;40};0)  cell    3   6.14.9 MATCH inline-array row source
186MATCH.inline.row.arr    =MATCH(30;{10;20;30;40};0)  array   3   6.14.9 MATCH inline-array row source
187MATCH.inline.col.cell   =MATCH(30;{10|20|30|40};0)  cell    3   6.14.9 MATCH inline-array column source
188MATCH.inline.col.arr    =MATCH(30;{10|20|30|40};0)  array   3   6.14.9 MATCH inline-array column source
189MATCH.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
190MATCH.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
191MATCH.nested.mul.cell   =MATCH(30;D1:D5*1;0)    cell    3   6.14.9 MATCH nested-expression source
192MATCH.nested.mul.arr    =MATCH(30;D1:D5*1;0)    array   3   6.14.9 MATCH nested-expression source
193MATCH.nested.sorted.cell    =MATCH(35;D1:D5*1;1)    cell    3   6.14.9 MATCH nested-expression source, MatchType 1
194MATCH.nested.sorted.arr =MATCH(35;D1:D5*1;1)    array   3   6.14.9 MATCH nested-expression source, MatchType 1
195ISECT.abs.row3  =ABS(D1:D5) cell@3  30  3.3 1.2.2: column-vector range in scalar parameter, intersect formula row 3
196ISECT.abs.row7  =ABS(D1:D5) cell@7  #ERR    3.3 note 4: no intersection gives #N/A or a more specific Error
197ISECT.match.row4    =MATCH(D1:D5;D1:D5;0)   cell@4  4   Search is Scalar: implicit intersection gives D4=40, position 4
198ISECT.match.row2    =MATCH(D1:D5;D1:D5;0)   cell@2  2   Search is Scalar: implicit intersection gives D2=20, position 2
199ISECT.match.row7    =MATCH(D1:D5;D1:D5;0)   cell@7  #ERR    no intersection at row 7: #N/A or a more specific Error
200ISECT.vlookup.row2  =VLOOKUP(D1:D5;D1:F5;2;0)   cell@2  22  Lookup is Any, not ForceArray: intersection D2=20, then column 2 = 22
201LINEST.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
202LINEST.range.arr    =LINEST(N1:N6;O1:O6)    array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST: slope, intercept
203LINEST.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
204LINEST.range.statscell  =LINEST(N1:N6;O1:O6;1;1)    cell    2.28571428571   6.18.41 LINEST: plain cell with Stats shows element (0;0)
205LINEST.nox.cell =LINEST(N1:N6)  cell    2.28571428571   6.18.41 LINEST: KnownX omitted = 1,2,3,...
206LINEST.nox.arr  =LINEST(N1:N6)  array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST: KnownX omitted = 1,2,3,...
207LINEST.emptyx.arr   =LINEST(N1:N6;;1;0) array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST: KnownX empty parameter = 1,2,3,...
208LINEST.noconst.cell =LINEST(N1:N6;O1:O6;0)  cell    2.43956043956   6.18.41 LINEST: Const FALSE, slope through origin
209LINEST.noconst.arr  =LINEST(N1:N6;O1:O6;0)  array:2x1   2.43956043956|0 6.18.41 LINEST: Const FALSE, a = 0
210LINEST.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
211LINEST.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
212LINEST.nested.cell  =LINEST(N1:N6*1;O1:O6*1)    cell    2.28571428571   6.18.41 LINEST nested-expression sources (ForceArray)
213LINEST.nested.arr   =LINEST(N1:N6*1;O1:O6*1)    array:2x1   2.28571428571|0.666666666667    6.18.41 LINEST nested-expression sources (ForceArray)
214LINEST.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
215LINEST.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
216LINEST.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
217LINEST.k3.cell  =LINEST({3;5;8};{1;2;3})    cell    2.5 6.18.41 LINEST: k=3 > n+1, valid
218LINEST.constmissing =LINEST(N1:N6;O1:O6;)   cell    -   empty Const parameter is not in the 1.3 syntax; current behaviour only
219LINEST.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
220LOGEST.range.cell   =LOGEST(P1:P6;O1:O6)    cell    1.96506174  6.18.42 LOGEST: plain cell shows element (0;0) = e^b
221LOGEST.range.arr    =LOGEST(P1:P6;O1:O6)    array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST: e^b, e^a
222LOGEST.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
223LOGEST.nox.cell =LOGEST(P1:P6)  cell    1.96506174  6.18.42 LOGEST: KnownX omitted = 1,2,3,...
224LOGEST.nox.arr  =LOGEST(P1:P6)  array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST: KnownX omitted = 1,2,3,...
225LOGEST.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
226LOGEST.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
227LOGEST.nested.cell  =LOGEST(P1:P6*1;O1:O6*1)    cell    1.96506174  6.18.42 LOGEST nested-expression sources (ForceArray)
228LOGEST.nested.arr   =LOGEST(P1:P6*1;O1:O6*1)    array:2x1   1.96506174|1.00150869124    6.18.42 LOGEST nested-expression sources (ForceArray)
229LOGEST.negy =LOGEST({3;-5;8};{1;2;3})   cell    #ERR    6.18.42 LOGEST: a negative entry in KnownY is an error
230FTEST.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)
231FTEST.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
232FTEST.3_11.cell =FTEST(AI1:AI3;AH1:AH11)    cell    0.8364238848    6.18.30 FTEST: arguments swapped, ratio 1/1.05, F(2,10)
233FTEST.equal.cell    =FTEST(AJ1:AJ4;AK1:AK4) cell    1   6.18.30 FTEST: identical data, ratio 1, Ptail=0.5, result 1
234FTEST.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
235FTEST.nested.cell   =FTEST(AH1:AH11*1;AI1:AI3*1)    cell    0.8364238848    6.18.30 FTEST nested-expression sources, same data
236FTEST.one   =FTEST(AI1:AI1;AI1:AI3) cell    -   constraint (at least 2 numbers) violated; the Error is not stated for constraint violations here
237FTEST.zerovar   =FTEST({1;1;1};{1;3;5}) cell    -   constraint (nonzero variances) violated; the Error is not stated
238DAYS360.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
239DAYS360.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
240DAYS360.omit    =DAYS360(DATE(2024;2;29);DATE(2024;3;31))   cell    30  6.10.7 DAYS360: Method defaults to FALSE
241DAYS360.swap.true   =DAYS360(DATE(2024;3;31);DATE(2024;2;29);TRUE)  cell    -31 6.10.7 DAYS360: European method swaps dates, sign -1
242DAYS360.swap.false  =DAYS360(DATE(2024;3;31);DATE(2024;2;29);FALSE) cell    -31 6.10.7 DAYS360: US method never swaps
243DAYS360.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
244DAYS360.feb23.true  =DAYS360(DATE(2023;2;28);DATE(2023;3;31);TRUE)  cell    32  6.10.7 DAYS360: European method, 28 stays
245DAYS360.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
246DAYS360.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
247CELL.addr.other =CELL("ADDRESS";$Other.B2)  cell    -   6.13.3: sheet name included for another sheet; the text form is not specified
248CELL.addr.other.range   =CELL("ADDRESS";$Other.B2:C3)   cell    -   6.13.3: top-left cell of the range; text form not specified
249CELL.addr.same  =CELL("ADDRESS";B2) cell    -   6.13.3: same sheet, no sheet name; text form not specified
250CELL.col.other  =CELL("COL";$Other.B2)  cell    2   6.13.3 Table 17: column number
251CELL.row.other  =CELL("ROW";$Other.B2)  cell    2   6.13.3 Table 17: row number
252CELL.sheet.other    =CELL("SHEET";$Other.B2)    cell    -   6.13.3 Table 17: sheet number; numbering base not stated
253BESSELK.x0  =BESSELK(0;1)   cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
254BESSELK.xm1 =BESSELK(-1;1)  cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
255BESSELK.xm0p5   =BESSELK(-0.5;1)    cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
256BESSELK.n0.x0   =BESSELK(0;0)   cell    -   constraint X <> 0 violated
257BESSELY.x0  =BESSELY(0;1)   cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
258BESSELY.xm1 =BESSELY(-1;1)  cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
259BESSELY.xm0p5   =BESSELY(-0.5;1)    cell    -   6.16.14/15: constraint X <> 0; no value is given for x <= 0
260BESSELY.n0.x0   =BESSELY(0;0)   cell    -   constraint X <> 0 violated
261BESSELK.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)
262BESSELK.ctl.K1  =BESSELK(1;1)   cell    ~0.601907230197 control: K1(1); ~ tolerance
263BESSELY.ctl.Y0  =BESSELY(1;0)   cell    ~0.0882569642157    control: Y0(1); ~ tolerance
264BESSELY.ctl.Y1  =BESSELY(1;1)   cell    ~-0.7812128213  control: Y1(1); ~ tolerance
265FARR.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)
266FARR.sumprod.vlookup    =SUMPRODUCT(VLOOKUP(D1:D3;D1:E5;2;0))   cell    66  same for VLOOKUP: 11+22+33
267FARR.sumprod.abs    =SUMPRODUCT(ABS(D1:D3)) cell    60  control without lookup function
268