This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch openformula
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 99b951c4803b990feec7c409905a0da7f58c01e1
Author: Pedro Giffuni <[email protected]>
AuthorDate: Wed Nov 11 14:47:15 2026 -0500

    sc: correct OpenFormula Milestone D audit statuses (D.1) and add Small 
Group semantic tests (E)
    
    D.1 - Audit corrections:
    - Changed all 110 Small Group function statuses from IMPLEMENTED_MATCH to
      IMPLEMENTED_UNVERIFIED (implementation presence confirmed, semantic
      equivalence not runtime-verified)
    - Marked all 4 Basic Limits as UNVERIFIED (dynamic structures don't prove
      conformance)
    - Distinguished conversion implementation presence from semantic 
verification
    - Identified specific unverified grammar cases in Syntax section
    - Corrected INDEX row-vector behavior description (Milestone A fix: returns
      error, not column)
    - Corrected CONVERT atm value (Milestone C fix: 101325.1 Pa, not
      101324.996583 Pa)
    - Reconciled test-gap-analysis.md with Milestones A-C (IFNA/SKEWP 
implemented,
      INDEX/CONVERT fixed)
    - Updated openformula-functions.tsv: IFNA and SKEWP status IMPLEMENTED
    
    E - Semantic test infrastructure:
    - test/odf-validate/openformula-small-group-1.4.tsv: 53 
requirement-referenced
      test cases covering Basic Limits, Syntax, Operators, Conversions, 
Functions,
      and INDEX/COUNTA/DATE/BIT semantic cases
    - test/odf-validate/calcval-cases14.tsv: Added 13 semantic test cases
      (COUNTA, COUNTBLANK, DATE pre-1583, INDEX row-vector, BITLSHIFT/BITRSHIFT
      negative shift, BITAND 3-param)
    - openformula-small-group-test-plan.md: Execution instructions, priority 
order,
      outstanding runtime requirements
    
    No production source changes. Build/runtime validation deferred (no 
configured
    AOO build tree).
---
 openformula-small-group-1.4.tsv                   | 298 +++++++++++-----------
 openformula-small-group-audit.md                  | 234 +++++------------
 openformula-small-group-test-plan.md              |  90 +++++++
 openformula-test-gap-analysis.md                  |  12 +-
 test/odf-validate/calcval-cases14.tsv             |  10 +
 test/odf-validate/openformula-small-group-1.4.tsv |  79 ++++++
 6 files changed, 400 insertions(+), 323 deletions(-)

diff --git a/openformula-small-group-1.4.tsv b/openformula-small-group-1.4.tsv
index 25a1c0a67f..968dd7ccff 100644
--- a/openformula-small-group-1.4.tsv
+++ b/openformula-small-group-1.4.tsv
@@ -1,149 +1,149 @@
-ReqID  Section Requirement Description Mandatory/Optional      Conformance 
Group       ODF Version Introduced/Changed  Suggested Test
-SG-BL-001      3.7     Formula length: at least 1024 characters long as 
measured in OpenDocument interchange format    Mandatory       Small   ODF 1.4 
Parse a 1024+ character formula; verify accepted.
-SG-BL-002      3.7     At least 30 parameters per function when prototype 
permits parameter list       Mandatory       Small   ODF 1.4 Call function with 
30 parameters; verify accepted.
-SG-BL-003      3.7     Permit strings of ASCII characters up to 32767 (2^15-1) 
characters      Mandatory       Small   ODF 1.4 Parse/return 32767-character 
string; verify accepted.
-SG-BL-004      3.7     Support at least 7 nesting levels of functions  
Mandatory       Small   ODF 1.4 Nest 7 levels of functions; verify accepted.
-SG-FN-001      6.16.2  ABS     Mandatory       Small   ODF 1.2 Evaluate 
ABS(-3); verify 3.
-SG-FN-002      6.16.3  ACOS    Mandatory       Small   ODF 1.2 Evaluate 
ACOS(0); verify pi/2.
-SG-FN-003      6.15.2  AND     Mandatory       Small   ODF 1.2 Evaluate 
AND(TRUE,TRUE); verify TRUE.
-SG-FN-004      6.16.7  ASIN    Mandatory       Small   ODF 1.2 Evaluate 
ASIN(0); verify 0.
-SG-FN-005      6.16.9  ATAN    Mandatory       Small   ODF 1.2 Evaluate 
ATAN(0); verify 0.
-SG-FN-006      6.16.10 ATAN2   Mandatory       Small   ODF 1.2 Evaluate 
ATAN2(1,1); verify pi/4.
-SG-FN-007      6.18.3  AVERAGE Mandatory       Small   ODF 1.2 Evaluate 
AVERAGE(1,2,3); verify 2.
-SG-FN-008      6.18.5  AVERAGEIF       Mandatory       Small   ODF 1.2 
Evaluate AVERAGEIF(range,criteria); verify average.
-SG-FN-009      6.14.3  CHOOSE  Mandatory       Small   ODF 1.2 Evaluate 
CHOOSE(2,"a","b","c"); verify "b".
-SG-FN-010      6.13.5  COLUMNS Mandatory       Small   ODF 1.2 Evaluate 
COLUMNS(A1:C1); verify 3.
-SG-FN-011      6.16.19 COS     Mandatory       Small   ODF 1.2 Evaluate 
COS(0); verify 1.
-SG-FN-012      6.13.6  COUNT   Mandatory       Small   ODF 1.2 Evaluate 
COUNT(1,2,"x"); verify 2.
-SG-FN-013      6.13.7  COUNTA  Mandatory       Small   ODF 1.2 Evaluate 
COUNTA(1,"x",""); verify non-empty count.
-SG-FN-014      6.13.8  COUNTBLANK      Mandatory       Small   ODF 1.2 
Evaluate COUNTBLANK(range); verify blank count.
-SG-FN-015      6.13.9  COUNTIF Mandatory       Small   ODF 1.2 Evaluate 
COUNTIF(range,criteria); verify count.
-SG-FN-016      6.10.2  DATE    Mandatory       Small   ODF 1.2 Evaluate 
DATE(2025,1,1); verify serial.
-SG-FN-017      6.9.2   DAVERAGE        Mandatory       Small   ODF 1.2 
Evaluate DAVERAGE(database,field,criteria); verify average.
-SG-FN-018      6.10.5  DAY     Mandatory       Small   ODF 1.2 Evaluate 
DAY(DATE(2025,3,15)); verify 15.
-SG-FN-019      6.9.3   DCOUNT  Mandatory       Small   ODF 1.2 Evaluate 
DCOUNT(database,field,criteria); verify count.
-SG-FN-020      6.9.4   DCOUNTA Mandatory       Small   ODF 1.2 Evaluate 
DCOUNTA(database,field,criteria); verify count.
-SG-FN-021      6.12.14 DDB     Mandatory       Small   ODF 1.2 Evaluate 
DDB(cost,salvage,life,period); verify depreciation.
-SG-FN-022      6.16.25 DEGREES Mandatory       Small   ODF 1.2 Evaluate 
DEGREES(PI()); verify 180.
-SG-FN-023      6.9.5   DGET    Mandatory       Small   ODF 1.2 Evaluate 
DGET(database,field,criteria); verify value.
-SG-FN-024      6.9.6   DMAX    Mandatory       Small   ODF 1.2 Evaluate 
DMAX(database,field,criteria); verify max.
-SG-FN-025      6.9.7   DMIN    Mandatory       Small   ODF 1.2 Evaluate 
DMIN(database,field,criteria); verify min.
-SG-FN-026      6.9.8   DPRODUCT        Mandatory       Small   ODF 1.2 
Evaluate DPRODUCT(database,field,criteria); verify product.
-SG-FN-027      6.9.9   DSTDEV  Mandatory       Small   ODF 1.2 Evaluate 
DSTDEV(database,field,criteria); verify stddev.
-SG-FN-028      6.9.10  DSTDEVP Mandatory       Small   ODF 1.2 Evaluate 
DSTDEVP(database,field,criteria); verify stddevp.
-SG-FN-029      6.9.11  DSUM    Mandatory       Small   ODF 1.2 Evaluate 
DSUM(database,field,criteria); verify sum.
-SG-FN-030      6.9.12  DVAR    Mandatory       Small   ODF 1.2 Evaluate 
DVAR(database,field,criteria); verify variance.
-SG-FN-031      6.9.13  DVARP   Mandatory       Small   ODF 1.2 Evaluate 
DVARP(database,field,criteria); verify variancep.
-SG-FN-032      6.16.30 EVEN    Mandatory       Small   ODF 1.2 Evaluate 
EVEN(1.3); verify 2.
-SG-FN-033      6.20.8  EXACT   Mandatory       Small   ODF 1.2 Evaluate 
EXACT("a","a"); verify TRUE.
-SG-FN-034      6.16.31 EXP     Mandatory       Small   ODF 1.2 Evaluate 
EXP(1); verify e.
-SG-FN-035      6.16.32 FACT    Mandatory       Small   ODF 1.2 Evaluate 
FACT(5); verify 120.
-SG-FN-036      6.15.3  FALSE   Mandatory       Small   ODF 1.2 Evaluate 
FALSE(); verify FALSE.
-SG-FN-037      6.20.9  FIND    Mandatory       Small   ODF 1.2 Evaluate 
FIND("b","abc"); verify 2.
-SG-FN-038      6.12.20 FV      Mandatory       Small   ODF 1.2 Evaluate 
FV(rate,nper,pmt); verify future value.
-SG-FN-039      6.14.5  HLOOKUP Mandatory       Small   ODF 1.2 Evaluate 
HLOOKUP(value,table,row); verify result.
-SG-FN-040      6.10.11 HOUR    Mandatory       Small   ODF 1.2 Evaluate 
HOUR(TIME(12,30,0)); verify 12.
-SG-FN-041      6.15.4  IF      Mandatory       Small   ODF 1.2 Evaluate 
IF(TRUE,1,2); verify 1.
-SG-FN-042      6.14.6  INDEX   Mandatory       Small   ODF 1.2 Evaluate 
INDEX(range,row,col); verify cell value.
-SG-FN-043      6.17.2  INT     Mandatory       Small   ODF 1.2 Evaluate 
INT(1.9); verify 1.
-SG-FN-044      6.12.24 IRR     Mandatory       Small   ODF 1.2 Evaluate 
IRR(values); verify internal rate of return.
-SG-FN-045      6.13.14 ISBLANK Mandatory       Small   ODF 1.2 Evaluate 
ISBLANK(cell); verify TRUE/FALSE.
-SG-FN-046      6.13.15 ISERR   Mandatory       Small   ODF 1.2 Evaluate 
ISERR(1/0); verify TRUE.
-SG-FN-047      6.13.16 ISERROR Mandatory       Small   ODF 1.2 Evaluate 
ISERROR(1/0); verify TRUE.
-SG-FN-048      6.13.19 ISLOGICAL       Mandatory       Small   ODF 1.2 
Evaluate ISLOGICAL(TRUE); verify TRUE.
-SG-FN-049      6.13.20 ISNA    Mandatory       Small   ODF 1.2 Evaluate 
ISNA(NA()); verify TRUE.
-SG-FN-050      6.13.21 ISNONTEXT       Mandatory       Small   ODF 1.2 
Evaluate ISNONTEXT(1); verify TRUE.
-SG-FN-051      6.13.22 ISNUMBER        Mandatory       Small   ODF 1.2 
Evaluate ISNUMBER(1); verify TRUE.
-SG-FN-052      6.13.25 ISTEXT  Mandatory       Small   ODF 1.2 Evaluate 
ISTEXT("a"); verify TRUE.
-SG-FN-053      6.20.12 LEFT    Mandatory       Small   ODF 1.2 Evaluate 
LEFT("abc",2); verify "ab".
-SG-FN-054      6.20.13 LEN     Mandatory       Small   ODF 1.2 Evaluate 
LEN("abc"); verify 3.
-SG-FN-055      6.16.39 LN      Mandatory       Small   ODF 1.2 Evaluate LN(1); 
verify 0.
-SG-FN-056      6.16.40 LOG     Mandatory       Small   ODF 1.2 Evaluate 
LOG(100,10); verify 2.
-SG-FN-057      6.16.41 LOG10   Mandatory       Small   ODF 1.2 Evaluate 
LOG10(100); verify 2.
-SG-FN-058      6.20.14 LOWER   Mandatory       Small   ODF 1.2 Evaluate 
LOWER("ABC"); verify "abc".
-SG-FN-059      6.14.9  MATCH   Mandatory       Small   ODF 1.2 Evaluate 
MATCH(value,range,type); verify position.
-SG-FN-060      6.18.45 MAX     Mandatory       Small   ODF 1.2 Evaluate 
MAX(1,2,3); verify 3.
-SG-FN-061      6.20.15 MID     Mandatory       Small   ODF 1.2 Evaluate 
MID("abc",2,1); verify "b".
-SG-FN-062      6.18.48 MIN     Mandatory       Small   ODF 1.2 Evaluate 
MIN(1,2,3); verify 1.
-SG-FN-063      6.10.13 MINUTE  Mandatory       Small   ODF 1.2 Evaluate 
MINUTE(TIME(12,30,0)); verify 30.
-SG-FN-064      6.16.42 MOD     Mandatory       Small   ODF 1.2 Evaluate 
MOD(5,2); verify 1.
-SG-FN-065      6.10.14 MONTH   Mandatory       Small   ODF 1.2 Evaluate 
MONTH(DATE(2025,3,15)); verify 3.
-SG-FN-066      6.13.26 N       Mandatory       Small   ODF 1.2 Evaluate 
N(TRUE); verify 1.
-SG-FN-067      6.13.27 NA      Mandatory       Small   ODF 1.2 Evaluate NA(); 
verify #N/A error.
-SG-FN-068      6.15.7  NOT     Mandatory       Small   ODF 1.2 Evaluate 
NOT(TRUE); verify FALSE.
-SG-FN-069      6.10.16 NOW     Mandatory       Small   ODF 1.2 Evaluate NOW(); 
verify current datetime.
-SG-FN-070      6.12.29 NPER    Mandatory       Small   ODF 1.2 Evaluate 
NPER(rate,pmt,pv); verify periods.
-SG-FN-071      6.12.30 NPV     Mandatory       Small   ODF 1.2 Evaluate 
NPV(rate,values); verify net present value.
-SG-FN-072      6.16.44 ODD     Mandatory       Small   ODF 1.2 Evaluate 
ODD(1.3); verify 3.
-SG-FN-073      6.15.8  OR      Mandatory       Small   ODF 1.2 Evaluate 
OR(FALSE,TRUE); verify TRUE.
-SG-FN-074      6.16.45 PI      Mandatory       Small   ODF 1.2 Evaluate PI(); 
verify pi.
-SG-FN-075      6.12.36 PMT     Mandatory       Small   ODF 1.2 Evaluate 
PMT(rate,nper,pv); verify payment.
-SG-FN-076      6.16.46 POWER   Mandatory       Small   ODF 1.2 Evaluate 
POWER(2,3); verify 8.
-SG-FN-077      6.16.47 PRODUCT Mandatory       Small   ODF 1.2 Evaluate 
PRODUCT(2,3); verify 6.
-SG-FN-078      6.20.16 PROPER  Mandatory       Small   ODF 1.2 Evaluate 
PROPER("abc"); verify "Abc".
-SG-FN-079      6.12.41 PV      Mandatory       Small   ODF 1.2 Evaluate 
PV(rate,nper,pmt); verify present value.
-SG-FN-080      6.16.49 RADIANS Mandatory       Small   ODF 1.2 Evaluate 
RADIANS(180); verify pi.
-SG-FN-081      6.12.42 RATE    Mandatory       Small   ODF 1.2 Evaluate 
RATE(nper,pmt,pv); verify rate.
-SG-FN-082      6.20.17 REPLACE Mandatory       Small   ODF 1.2 Evaluate 
REPLACE("abc",2,1,"x"); verify "axc".
-SG-FN-083      6.20.18 REPT    Mandatory       Small   ODF 1.2 Evaluate 
REPT("a",3); verify "aaa".
-SG-FN-084      6.20.19 RIGHT   Mandatory       Small   ODF 1.2 Evaluate 
RIGHT("abc",2); verify "bc".
-SG-FN-085      6.17.5  ROUND   Mandatory       Small   ODF 1.2 Evaluate 
ROUND(1.6,0); verify 2.
-SG-FN-086      6.13.30 ROWS    Mandatory       Small   ODF 1.2 Evaluate 
ROWS(A1:A3); verify 3.
-SG-FN-087      6.10.17 SECOND  Mandatory       Small   ODF 1.2 Evaluate 
SECOND(TIME(12,30,45)); verify 45.
-SG-FN-088      6.16.55 SIN     Mandatory       Small   ODF 1.2 Evaluate 
SIN(0); verify 0.
-SG-FN-089      6.12.45 SLN     Mandatory       Small   ODF 1.2 Evaluate 
SLN(cost,salvage,life); verify depreciation.
-SG-FN-090      6.16.58 SQRT    Mandatory       Small   ODF 1.2 Evaluate 
SQRT(4); verify 2.
-SG-FN-091      6.18.72 STDEV   Mandatory       Small   ODF 1.2 Evaluate 
STDEV(values); verify sample stddev.
-SG-FN-092      6.18.74 STDEVP  Mandatory       Small   ODF 1.2 Evaluate 
STDEVP(values); verify population stddev.
-SG-FN-093      6.20.21 SUBSTITUTE      Mandatory       Small   ODF 1.2 
Evaluate SUBSTITUTE("aaa","a","b"); verify "bbb".
-SG-FN-094      6.16.61 SUM     Mandatory       Small   ODF 1.2 Evaluate 
SUM(1,2,3); verify 6.
-SG-FN-095      6.16.62 SUMIF   Mandatory       Small   ODF 1.2 Evaluate 
SUMIF(range,criteria,sumrange); verify sum.
-SG-FN-096      6.12.46 SYD     Mandatory       Small   ODF 1.2 Evaluate 
SYD(cost,salvage,life,period); verify depreciation.
-SG-FN-097      6.20.22 T       Mandatory       Small   ODF 1.2 Evaluate 
T("abc"); verify "abc".
-SG-FN-098      6.16.69 TAN     Mandatory       Small   ODF 1.2 Evaluate 
TAN(0); verify 0.
-SG-FN-099      6.10.18 TIME    Mandatory       Small   ODF 1.2 Evaluate 
TIME(12,30,0); verify time serial.
-SG-FN-100      6.10.20 TODAY   Mandatory       Small   ODF 1.2 Evaluate 
TODAY(); verify current date serial.
-SG-FN-101      6.20.24 TRIM    Mandatory       Small   ODF 1.2 Evaluate TRIM(" 
a  b "); verify "a b".
-SG-FN-102      6.15.9  TRUE    Mandatory       Small   ODF 1.2 Evaluate 
TRUE(); verify TRUE.
-SG-FN-103      6.17.8  TRUNC   Mandatory       Small   ODF 1.2 Evaluate 
TRUNC(1.9); verify 1.
-SG-FN-104      6.20.27 UPPER   Mandatory       Small   ODF 1.2 Evaluate 
UPPER("abc"); verify "ABC".
-SG-FN-105      6.13.34 VALUE   Mandatory       Small   ODF 1.2 Evaluate 
VALUE("123"); verify 123.
-SG-FN-106      6.18.82 VAR     Mandatory       Small   ODF 1.2 Evaluate 
VAR(values); verify sample variance.
-SG-FN-107      6.18.84 VARP    Mandatory       Small   ODF 1.2 Evaluate 
VARP(values); verify population variance.
-SG-FN-108      6.14.12 VLOOKUP Mandatory       Small   ODF 1.2 Evaluate 
VLOOKUP(value,table,col,range); verify result.
-SG-FN-109      6.10.21 WEEKDAY Mandatory       Small   ODF 1.2 Evaluate 
WEEKDAY(date); verify day number.
-SG-FN-110      6.10.24 YEAR    Mandatory       Small   ODF 1.2 Evaluate 
YEAR(DATE(2025,3,15)); verify 2025.
-SG-ALW-001     2.3.2.F References containing more than one area need not be 
evaluated  Optional        Small   ODF 1.4 Reference with multiple areas; may 
return error or partial result.
-SG-ALW-002     2.3.2.G Inline arrays need not be implemented   Optional        
Small   ODF 1.4 Use {1,2} inline array; may return error.
-SG-ALW-003     2.3.2.G Complex numbers need not be implemented Optional        
Small   ODF 1.4 Use COMPLEX function; may return error.
-SG-ALW-004     2.3.2.G Reference union operator (~) need not be implemented    
Optional        Small   ODF 1.4 Use A1:B2~C3:D4; may return error.
-SG-SYN-001     4.11.11 Criteria syntax supported       Mandatory       Small   
ODF 1.4 Use criteria in database functions; verify parsed correctly.
-SG-SYN-002     5.2     Basic Expressions syntax supported      Mandatory       
Small   ODF 1.4 Parse parenthesized expressions; verify evaluation.
-SG-SYN-003     5.3     Constant Numbers syntax supported       Mandatory       
Small   ODF 1.4 Parse numeric literals including decimals, scientific notation; 
verify.
-SG-SYN-004     5.4     Constant Strings syntax supported       Mandatory       
Small   ODF 1.4 Parse string literals with quote escaping; verify.
-SG-SYN-005     5.5     Operators syntax supported (precedence per Table 1)     
Mandatory       Small   ODF 1.4 Evaluate 2+3*4 and 2^3^2; verify correct 
precedence.
-SG-SYN-006     5.6     Functions and Function Parameters syntax supported      
Mandatory       Small   ODF 1.4 Call functions with various argument counts; 
verify.
-SG-SYN-007     5.7     Nonstandard Function Names recognized as errors 
Mandatory       Small   ODF 1.4 Use unknown function name; verify error result.
-SG-SYN-008     5.8     References syntax supported     Mandatory       Small   
ODF 1.4 Use cell and range references; verify resolution.
-SG-SYN-009     5.11    Simple Named Expressions supported      Mandatory       
Small   ODF 1.4 Define and use named expression; verify.
-SG-SYN-010     5.12    Errors syntax supported Mandatory       Small   ODF 1.4 
Use error constants (#N/A, etc.); verify propagation.
-SG-SYN-011     5.14    Whitespace handling per specification   Mandatory       
Small   ODF 1.4 Insert whitespace in formula; verify identical result.
-SG-CONV-001    6.3.14  Conversion to Text implemented  Mandatory       Small   
ODF 1.4 Convert number/date/logical to text; verify result.
-SG-CONV-002    6.3.5   Conversion to Number implemented        Mandatory       
Small   ODF 1.4 Convert text to number; verify result.
-SG-CONV-003    4.8     Reference conversion implemented        Mandatory       
Small   ODF 1.4 Convert reference to scalar value; verify result.
-SG-CONV-004    6.3.12  Conversion to Logical implemented       Mandatory       
Small   ODF 1.4 Convert number to logical; verify result.
-SG-CONV-005    5.12    Error propagation when expression returns Error 
Mandatory       Small   ODF 1.4 Pass error as argument; verify error propagates.
-SG-OP-001      6.4.9   Infix Operator Ordered Comparison (<, <=, >, >=) 
implemented    Mandatory       Small   ODF 1.4 Evaluate comparisons; verify 
results.
-SG-OP-002      6.4.10  Infix Operator "&" (concatenation) implemented  
Mandatory       Small   ODF 1.4 Evaluate "a"&"b"; verify "ab".
-SG-OP-003      6.4.2   Infix Operator "+" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2+3; verify 5.
-SG-OP-004      6.4.3   Infix Operator "-" implemented  Mandatory       Small   
ODF 1.4 Evaluate 5-3; verify 2.
-SG-OP-005      6.4.4   Infix Operator "*" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2*3; verify 6.
-SG-OP-006      6.4.5   Infix Operator "/" implemented  Mandatory       Small   
ODF 1.4 Evaluate 6/3; verify 2.
-SG-OP-007      6.4.6   Infix Operator "^" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2^3; verify 8.
-SG-OP-008      6.4.7   Infix Operator "=" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2=2; verify TRUE.
-SG-OP-009      6.4.8   Infix Operator "<>" implemented Mandatory       Small   
ODF 1.4 Evaluate 2<>3; verify TRUE.
-SG-OP-010      6.4.14  Postfix Operator "%" implemented        Mandatory       
Small   ODF 1.4 Evaluate 50%; verify 0.5.
-SG-OP-011      6.4.15  Prefix Operator "+" implemented Mandatory       Small   
ODF 1.4 Evaluate +5; verify 5.
-SG-OP-012      6.4.16  Prefix Operator "-" implemented Mandatory       Small   
ODF 1.4 Evaluate -5; verify -5.
-SG-OP-013      6.4.12  Infix Operator Reference Intersection ("!") implemented 
Mandatory       Small   ODF 1.4 Evaluate A1:C3!B1:D2; verify intersection.
-SG-OP-014      6.4.11  Infix Operator Range (":") implemented  Mandatory       
Small   ODF 1.4 Evaluate SUM(A1:A3); verify range.
\ No newline at end of file
+ReqID  Section Requirement Description Mandatory/Optional      Conformance 
Group       ODF Version Introduced/Changed  Suggested Test  Status
+SG-BL-001      3.7     Formula length: at least 1024 characters long as 
measured in OpenDocument interchange format    Mandatory       Small   ODF 1.4 
Parse a 1024+ character formula; verify accepted.       UNVERIFIED
+SG-BL-002      3.7     At least 30 parameters per function when prototype 
permits parameter list       Mandatory       Small   ODF 1.4 Call function with 
30 parameters; verify accepted.      UNVERIFIED
+SG-BL-003      3.7     Permit strings of ASCII characters up to 32767 (2^15-1) 
characters      Mandatory       Small   ODF 1.4 Parse/return 32767-character 
string; verify accepted.   UNVERIFIED
+SG-BL-004      3.7     Support at least 7 nesting levels of functions  
Mandatory       Small   ODF 1.4 Nest 7 levels of functions; verify accepted.    
UNVERIFIED
+SG-SYN-001     4.11.11 Criteria syntax supported       Mandatory       Small   
ODF 1.4 Use criteria in database functions; verify parsed correctly.    
UNVERIFIED
+SG-SYN-002     5.2     Basic Expressions syntax supported      Mandatory       
Small   ODF 1.4 Parse parenthesized expressions; verify evaluation.     
UNVERIFIED
+SG-SYN-003     5.3     Constant Numbers syntax supported       Mandatory       
Small   ODF 1.4 Parse numeric literals including decimals, scientific notation; 
verify. UNVERIFIED
+SG-SYN-004     5.4     Constant Strings syntax supported       Mandatory       
Small   ODF 1.4 Parse string literals with quote escaping; verify.      
UNVERIFIED
+SG-SYN-005     5.5     Operators syntax supported (precedence per Table 1)     
Mandatory       Small   ODF 1.4 Evaluate 2+3*4 and 2^3^2; verify correct 
precedence.    UNVERIFIED
+SG-SYN-006     5.6     Functions and Function Parameters syntax supported      
Mandatory       Small   ODF 1.4 Call functions with various argument counts; 
verify.    UNVERIFIED
+SG-SYN-007     5.7     Nonstandard Function Names recognized as errors 
Mandatory       Small   ODF 1.4 Use unknown function name; verify error result. 
UNVERIFIED
+SG-SYN-008     5.8     References syntax supported     Mandatory       Small   
ODF 1.4 Use cell and range references; verify resolution.       UNVERIFIED
+SG-SYN-009     5.11    Simple Named Expressions supported      Mandatory       
Small   ODF 1.4 Define and use named expression; verify.        UNVERIFIED
+SG-SYN-010     5.12    Errors syntax supported Mandatory       Small   ODF 1.4 
Use error constants (#N/A, etc.); verify propagation.   UNVERIFIED
+SG-SYN-011     5.14    Whitespace handling per specification   Mandatory       
Small   ODF 1.4 Insert whitespace in formula; verify identical result.  
UNVERIFIED
+SG-CONV-001    6.3.14  Conversion to Text implemented  Mandatory       Small   
ODF 1.4 Convert number/date/logical to text; verify result.     
IMPLEMENTED_UNVERIFIED
+SG-CONV-002    6.3.5   Conversion to Number implemented        Mandatory       
Small   ODF 1.4 Convert text to number; verify result.  IMPLEMENTED_UNVERIFIED
+SG-CONV-003    4.8     Reference conversion implemented        Mandatory       
Small   ODF 1.4 Convert reference to scalar value; verify result.       
IMPLEMENTED_UNVERIFIED
+SG-CONV-004    6.3.12  Conversion to Logical implemented       Mandatory       
Small   ODF 1.4 Convert number to logical; verify result.       
IMPLEMENTED_UNVERIFIED
+SG-CONV-005    5.12    Error propagation when expression returns Error 
Mandatory       Small   ODF 1.4 Pass error as argument; verify error 
propagates.        IMPLEMENTED_UNVERIFIED
+SG-OP-001      6.4.9   Infix Operator Ordered Comparison (<, <=, >, >=) 
implemented    Mandatory       Small   ODF 1.4 Evaluate comparisons; verify 
results.   IMPLEMENTED_UNVERIFIED
+SG-OP-002      6.4.10  Infix Operator "&" (concatenation) implemented  
Mandatory       Small   ODF 1.4 Evaluate "a"&"b"; verify "ab".  
IMPLEMENTED_UNVERIFIED
+SG-OP-003      6.4.2   Infix Operator "+" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2+3; verify 5. IMPLEMENTED_UNVERIFIED
+SG-OP-004      6.4.3   Infix Operator "-" implemented  Mandatory       Small   
ODF 1.4 Evaluate 5-3; verify 2. IMPLEMENTED_UNVERIFIED
+SG-OP-005      6.4.4   Infix Operator "*" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2*3; verify 6. IMPLEMENTED_UNVERIFIED
+SG-OP-006      6.4.5   Infix Operator "/" implemented  Mandatory       Small   
ODF 1.4 Evaluate 6/3; verify 2. IMPLEMENTED_UNVERIFIED
+SG-OP-007      6.4.6   Infix Operator "^" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2^3; verify 8. IMPLEMENTED_UNVERIFIED
+SG-OP-008      6.4.7   Infix Operator "=" implemented  Mandatory       Small   
ODF 1.4 Evaluate 2=2; verify TRUE.      IMPLEMENTED_UNVERIFIED
+SG-OP-009      6.4.8   Infix Operator "<>" implemented Mandatory       Small   
ODF 1.4 Evaluate 2<>3; verify TRUE.     IMPLEMENTED_UNVERIFIED
+SG-OP-010      6.4.14  Postfix Operator "%" implemented        Mandatory       
Small   ODF 1.4 Evaluate 50%; verify 0.5.       IMPLEMENTED_UNVERIFIED
+SG-OP-011      6.4.15  Prefix Operator "+" implemented Mandatory       Small   
ODF 1.4 Evaluate +5; verify 5.  IMPLEMENTED_UNVERIFIED
+SG-OP-012      6.4.16  Prefix Operator "-" implemented Mandatory       Small   
ODF 1.4 Evaluate -5; verify -5. IMPLEMENTED_UNVERIFIED
+SG-OP-013      6.4.12  Infix Operator Reference Intersection ("!") implemented 
Mandatory       Small   ODF 1.4 Evaluate A1:C3!B1:D2; verify intersection.      
IMPLEMENTED_UNVERIFIED
+SG-OP-014      6.4.11  Infix Operator Range (":") implemented  Mandatory       
Small   ODF 1.4 Evaluate SUM(A1:A3); verify range.      IMPLEMENTED_UNVERIFIED
+SG-FN-001      6.16.2  ABS     Mandatory       Small   ODF 1.2 Evaluate 
ABS(-3); verify 3.     IMPLEMENTED_UNVERIFIED
+SG-FN-002      6.16.3  ACOS    Mandatory       Small   ODF 1.2 Evaluate 
ACOS(0); verify pi/2.  IMPLEMENTED_UNVERIFIED
+SG-FN-003      6.15.2  AND     Mandatory       Small   ODF 1.2 Evaluate 
AND(TRUE,TRUE); verify TRUE.   IMPLEMENTED_UNVERIFIED
+SG-FN-004      6.16.7  ASIN    Mandatory       Small   ODF 1.2 Evaluate 
ASIN(0); verify 0.     IMPLEMENTED_UNVERIFIED
+SG-FN-005      6.16.9  ATAN    Mandatory       Small   ODF 1.2 Evaluate 
ATAN(0); verify 0.     IMPLEMENTED_UNVERIFIED
+SG-FN-006      6.16.10 ATAN2   Mandatory       Small   ODF 1.2 Evaluate 
ATAN2(1,1); verify pi/4.       IMPLEMENTED_UNVERIFIED
+SG-FN-007      6.18.3  AVERAGE Mandatory       Small   ODF 1.2 Evaluate 
AVERAGE(1,2,3); verify 2.      IMPLEMENTED_UNVERIFIED
+SG-FN-008      6.18.5  AVERAGEIF       Mandatory       Small   ODF 1.2 
Evaluate AVERAGEIF(range,criteria); verify average.     IMPLEMENTED_UNVERIFIED
+SG-FN-009      6.14.3  CHOOSE  Mandatory       Small   ODF 1.2 Evaluate 
CHOOSE(2,"a","b","c"); verify "b".     IMPLEMENTED_UNVERIFIED
+SG-FN-010      6.13.5  COLUMNS Mandatory       Small   ODF 1.2 Evaluate 
COLUMNS(A1:C1); verify 3.      IMPLEMENTED_UNVERIFIED
+SG-FN-011      6.16.19 COS     Mandatory       Small   ODF 1.2 Evaluate 
COS(0); verify 1.      IMPLEMENTED_UNVERIFIED
+SG-FN-012      6.13.6  COUNT   Mandatory       Small   ODF 1.2 Evaluate 
COUNT(1,2,"x"); verify 2.      IMPLEMENTED_UNVERIFIED
+SG-FN-013      6.13.7  COUNTA  Mandatory       Small   ODF 1.2 Evaluate 
COUNTA(1,"x",""); verify non-empty count.      IMPLEMENTED_UNVERIFIED
+SG-FN-014      6.13.8  COUNTBLANK      Mandatory       Small   ODF 1.2 
Evaluate COUNTBLANK(range); verify blank count. IMPLEMENTED_UNVERIFIED
+SG-FN-015      6.13.9  COUNTIF Mandatory       Small   ODF 1.2 Evaluate 
COUNTIF(range,criteria); verify count. IMPLEMENTED_UNVERIFIED
+SG-FN-016      6.10.2  DATE    Mandatory       Small   ODF 1.2 Evaluate 
DATE(2025,1,1); verify serial. IMPLEMENTED_UNVERIFIED
+SG-FN-017      6.9.2   DAVERAGE        Mandatory       Small   ODF 1.2 
Evaluate DAVERAGE(database,field,criteria); verify average.     
IMPLEMENTED_UNVERIFIED
+SG-FN-018      6.10.5  DAY     Mandatory       Small   ODF 1.2 Evaluate 
DAY(DATE(2025,3,15)); verify 15.       IMPLEMENTED_UNVERIFIED
+SG-FN-019      6.9.3   DCOUNT  Mandatory       Small   ODF 1.2 Evaluate 
DCOUNT(database,field,criteria); verify count. IMPLEMENTED_UNVERIFIED
+SG-FN-020      6.9.4   DCOUNTA Mandatory       Small   ODF 1.2 Evaluate 
DCOUNTA(database,field,criteria); verify count.        IMPLEMENTED_UNVERIFIED
+SG-FN-021      6.12.14 DDB     Mandatory       Small   ODF 1.2 Evaluate 
DDB(cost,salvage,life,period); verify depreciation.    IMPLEMENTED_UNVERIFIED
+SG-FN-022      6.16.25 DEGREES Mandatory       Small   ODF 1.2 Evaluate 
DEGREES(PI()); verify 180.     IMPLEMENTED_UNVERIFIED
+SG-FN-023      6.9.5   DGET    Mandatory       Small   ODF 1.2 Evaluate 
DGET(database,field,criteria); verify value.   IMPLEMENTED_UNVERIFIED
+SG-FN-024      6.9.6   DMAX    Mandatory       Small   ODF 1.2 Evaluate 
DMAX(database,field,criteria); verify max.     IMPLEMENTED_UNVERIFIED
+SG-FN-025      6.9.7   DMIN    Mandatory       Small   ODF 1.2 Evaluate 
DMIN(database,field,criteria); verify min.     IMPLEMENTED_UNVERIFIED
+SG-FN-026      6.9.8   DPRODUCT        Mandatory       Small   ODF 1.2 
Evaluate DPRODUCT(database,field,criteria); verify product.     
IMPLEMENTED_UNVERIFIED
+SG-FN-027      6.9.9   DSTDEV  Mandatory       Small   ODF 1.2 Evaluate 
DSTDEV(database,field,criteria); verify stddev.        IMPLEMENTED_UNVERIFIED
+SG-FN-028      6.9.10  DSTDEVP Mandatory       Small   ODF 1.2 Evaluate 
DSTDEVP(database,field,criteria); verify stddevp.      IMPLEMENTED_UNVERIFIED
+SG-FN-029      6.9.11  DSUM    Mandatory       Small   ODF 1.2 Evaluate 
DSUM(database,field,criteria); verify sum.     IMPLEMENTED_UNVERIFIED
+SG-FN-030      6.9.12  DVAR    Mandatory       Small   ODF 1.2 Evaluate 
DVAR(database,field,criteria); verify variance.        IMPLEMENTED_UNVERIFIED
+SG-FN-031      6.9.13  DVARP   Mandatory       Small   ODF 1.2 Evaluate 
DVARP(database,field,criteria); verify variancep.      IMPLEMENTED_UNVERIFIED
+SG-FN-032      6.16.30 EVEN    Mandatory       Small   ODF 1.2 Evaluate 
EVEN(1.3); verify 2.   IMPLEMENTED_UNVERIFIED
+SG-FN-033      6.20.8  EXACT   Mandatory       Small   ODF 1.2 Evaluate 
EXACT("a","a"); verify TRUE.   IMPLEMENTED_UNVERIFIED
+SG-FN-034      6.16.31 EXP     Mandatory       Small   ODF 1.2 Evaluate 
EXP(1); verify e.      IMPLEMENTED_UNVERIFIED
+SG-FN-035      6.16.32 FACT    Mandatory       Small   ODF 1.2 Evaluate 
FACT(5); verify 120.   IMPLEMENTED_UNVERIFIED
+SG-FN-036      6.15.3  FALSE   Mandatory       Small   ODF 1.2 Evaluate 
FALSE(); verify FALSE. IMPLEMENTED_UNVERIFIED
+SG-FN-037      6.20.9  FIND    Mandatory       Small   ODF 1.2 Evaluate 
FIND("b","abc"); verify 2.     IMPLEMENTED_UNVERIFIED
+SG-FN-038      6.12.20 FV      Mandatory       Small   ODF 1.2 Evaluate 
FV(rate,nper,pmt); verify future value.        IMPLEMENTED_UNVERIFIED
+SG-FN-039      6.14.5  HLOOKUP Mandatory       Small   ODF 1.2 Evaluate 
HLOOKUP(value,table,row); verify result.       IMPLEMENTED_UNVERIFIED
+SG-FN-040      6.10.11 HOUR    Mandatory       Small   ODF 1.2 Evaluate 
HOUR(TIME(12,30,0)); verify 12.        IMPLEMENTED_UNVERIFIED
+SG-FN-041      6.15.4  IF      Mandatory       Small   ODF 1.2 Evaluate 
IF(TRUE,1,2); verify 1.        IMPLEMENTED_UNVERIFIED
+SG-FN-042      6.14.6  INDEX   Mandatory       Small   ODF 1.2 Evaluate 
INDEX(range,row,col); verify cell value.       IMPLEMENTED_UNVERIFIED
+SG-FN-043      6.17.2  INT     Mandatory       Small   ODF 1.2 Evaluate 
INT(1.9); verify 1.    IMPLEMENTED_UNVERIFIED
+SG-FN-044      6.12.24 IRR     Mandatory       Small   ODF 1.2 Evaluate 
IRR(values); verify internal rate of return.   IMPLEMENTED_UNVERIFIED
+SG-FN-045      6.13.14 ISBLANK Mandatory       Small   ODF 1.2 Evaluate 
ISBLANK(cell); verify TRUE/FALSE.      IMPLEMENTED_UNVERIFIED
+SG-FN-046      6.13.15 ISERR   Mandatory       Small   ODF 1.2 Evaluate 
ISERR(1/0); verify TRUE.       IMPLEMENTED_UNVERIFIED
+SG-FN-047      6.13.16 ISERROR Mandatory       Small   ODF 1.2 Evaluate 
ISERROR(1/0); verify TRUE.     IMPLEMENTED_UNVERIFIED
+SG-FN-048      6.13.19 ISLOGICAL       Mandatory       Small   ODF 1.2 
Evaluate ISLOGICAL(TRUE); verify TRUE.  IMPLEMENTED_UNVERIFIED
+SG-FN-049      6.13.20 ISNA    Mandatory       Small   ODF 1.2 Evaluate 
ISNA(NA()); verify TRUE.       IMPLEMENTED_UNVERIFIED
+SG-FN-050      6.13.21 ISNONTEXT       Mandatory       Small   ODF 1.2 
Evaluate ISNONTEXT(1); verify TRUE.     IMPLEMENTED_UNVERIFIED
+SG-FN-051      6.13.22 ISNUMBER        Mandatory       Small   ODF 1.2 
Evaluate ISNUMBER(1); verify TRUE.      IMPLEMENTED_UNVERIFIED
+SG-FN-052      6.13.25 ISTEXT  Mandatory       Small   ODF 1.2 Evaluate 
ISTEXT("a"); verify TRUE.      IMPLEMENTED_UNVERIFIED
+SG-FN-053      6.20.12 LEFT    Mandatory       Small   ODF 1.2 Evaluate 
LEFT("abc",2); verify "ab".    IMPLEMENTED_UNVERIFIED
+SG-FN-054      6.20.13 LEN     Mandatory       Small   ODF 1.2 Evaluate 
LEN("abc"); verify 3.  IMPLEMENTED_UNVERIFIED
+SG-FN-055      6.16.39 LN      Mandatory       Small   ODF 1.2 Evaluate LN(1); 
verify 0.       IMPLEMENTED_UNVERIFIED
+SG-FN-056      6.16.40 LOG     Mandatory       Small   ODF 1.2 Evaluate 
LOG(100,10); verify 2. IMPLEMENTED_UNVERIFIED
+SG-FN-057      6.16.41 LOG10   Mandatory       Small   ODF 1.2 Evaluate 
LOG10(100); verify 2.  IMPLEMENTED_UNVERIFIED
+SG-FN-058      6.20.14 LOWER   Mandatory       Small   ODF 1.2 Evaluate 
LOWER("ABC"); verify "abc".    IMPLEMENTED_UNVERIFIED
+SG-FN-059      6.14.9  MATCH   Mandatory       Small   ODF 1.2 Evaluate 
MATCH(value,range,type); verify position.      IMPLEMENTED_UNVERIFIED
+SG-FN-060      6.18.45 MAX     Mandatory       Small   ODF 1.2 Evaluate 
MAX(1,2,3); verify 3.  IMPLEMENTED_UNVERIFIED
+SG-FN-061      6.20.15 MID     Mandatory       Small   ODF 1.2 Evaluate 
MID("abc",2,1); verify "b".    IMPLEMENTED_UNVERIFIED
+SG-FN-062      6.18.48 MIN     Mandatory       Small   ODF 1.2 Evaluate 
MIN(1,2,3); verify 1.  IMPLEMENTED_UNVERIFIED
+SG-FN-063      6.10.13 MINUTE  Mandatory       Small   ODF 1.2 Evaluate 
MINUTE(TIME(12,30,0)); verify 30.      IMPLEMENTED_UNVERIFIED
+SG-FN-064      6.16.42 MOD     Mandatory       Small   ODF 1.2 Evaluate 
MOD(5,2); verify 1.    IMPLEMENTED_UNVERIFIED
+SG-FN-065      6.10.14 MONTH   Mandatory       Small   ODF 1.2 Evaluate 
MONTH(DATE(2025,3,15)); verify 3.      IMPLEMENTED_UNVERIFIED
+SG-FN-066      6.13.26 N       Mandatory       Small   ODF 1.2 Evaluate 
N(TRUE); verify 1.     IMPLEMENTED_UNVERIFIED
+SG-FN-067      6.13.27 NA      Mandatory       Small   ODF 1.2 Evaluate NA(); 
verify #N/A error.       IMPLEMENTED_UNVERIFIED
+SG-FN-068      6.15.7  NOT     Mandatory       Small   ODF 1.2 Evaluate 
NOT(TRUE); verify FALSE.       IMPLEMENTED_UNVERIFIED
+SG-FN-069      6.10.16 NOW     Mandatory       Small   ODF 1.2 Evaluate NOW(); 
verify current datetime.        IMPLEMENTED_UNVERIFIED
+SG-FN-070      6.12.29 NPER    Mandatory       Small   ODF 1.2 Evaluate 
NPER(rate,pmt,pv); verify periods.     IMPLEMENTED_UNVERIFIED
+SG-FN-071      6.12.30 NPV     Mandatory       Small   ODF 1.2 Evaluate 
NPV(rate,values); verify net present value.    IMPLEMENTED_UNVERIFIED
+SG-FN-072      6.16.44 ODD     Mandatory       Small   ODF 1.2 Evaluate 
ODD(1.3); verify 3.    IMPLEMENTED_UNVERIFIED
+SG-FN-073      6.15.8  OR      Mandatory       Small   ODF 1.2 Evaluate 
OR(FALSE,TRUE); verify TRUE.   IMPLEMENTED_UNVERIFIED
+SG-FN-074      6.16.45 PI      Mandatory       Small   ODF 1.2 Evaluate PI(); 
verify pi.       IMPLEMENTED_UNVERIFIED
+SG-FN-075      6.12.36 PMT     Mandatory       Small   ODF 1.2 Evaluate 
PMT(rate,nper,pv); verify payment.     IMPLEMENTED_UNVERIFIED
+SG-FN-076      6.16.46 POWER   Mandatory       Small   ODF 1.2 Evaluate 
POWER(2,3); verify 8.  IMPLEMENTED_UNVERIFIED
+SG-FN-077      6.16.47 PRODUCT Mandatory       Small   ODF 1.2 Evaluate 
PRODUCT(2,3); verify 6.        IMPLEMENTED_UNVERIFIED
+SG-FN-078      6.20.16 PROPER  Mandatory       Small   ODF 1.2 Evaluate 
PROPER("abc"); verify "Abc".   IMPLEMENTED_UNVERIFIED
+SG-FN-079      6.12.41 PV      Mandatory       Small   ODF 1.2 Evaluate 
PV(rate,nper,pmt); verify present value.       IMPLEMENTED_UNVERIFIED
+SG-FN-080      6.16.49 RADIANS Mandatory       Small   ODF 1.2 Evaluate 
RADIANS(180); verify pi.       IMPLEMENTED_UNVERIFIED
+SG-FN-081      6.12.42 RATE    Mandatory       Small   ODF 1.2 Evaluate 
RATE(nper,pmt,pv); verify rate.        IMPLEMENTED_UNVERIFIED
+SG-FN-082      6.20.17 REPLACE Mandatory       Small   ODF 1.2 Evaluate 
REPLACE("abc",2,1,"x"); verify "axc".  IMPLEMENTED_UNVERIFIED
+SG-FN-083      6.20.18 REPT    Mandatory       Small   ODF 1.2 Evaluate 
REPT("a",3); verify "aaa".     IMPLEMENTED_UNVERIFIED
+SG-FN-084      6.20.19 RIGHT   Mandatory       Small   ODF 1.2 Evaluate 
RIGHT("abc",2); verify "bc".   IMPLEMENTED_UNVERIFIED
+SG-FN-085      6.17.5  ROUND   Mandatory       Small   ODF 1.2 Evaluate 
ROUND(1.6,0); verify 2.        IMPLEMENTED_UNVERIFIED
+SG-FN-086      6.13.30 ROWS    Mandatory       Small   ODF 1.2 Evaluate 
ROWS(A1:A3); verify 3. IMPLEMENTED_UNVERIFIED
+SG-FN-087      6.10.17 SECOND  Mandatory       Small   ODF 1.2 Evaluate 
SECOND(TIME(12,30,45)); verify 45.     IMPLEMENTED_UNVERIFIED
+SG-FN-088      6.16.55 SIN     Mandatory       Small   ODF 1.2 Evaluate 
SIN(0); verify 0.      IMPLEMENTED_UNVERIFIED
+SG-FN-089      6.12.45 SLN     Mandatory       Small   ODF 1.2 Evaluate 
SLN(cost,salvage,life); verify depreciation.   IMPLEMENTED_UNVERIFIED
+SG-FN-090      6.16.58 SQRT    Mandatory       Small   ODF 1.2 Evaluate 
SQRT(4); verify 2.     IMPLEMENTED_UNVERIFIED
+SG-FN-091      6.18.72 STDEV   Mandatory       Small   ODF 1.2 Evaluate 
STDEV(values); verify sample stddev.   IMPLEMENTED_UNVERIFIED
+SG-FN-092      6.18.74 STDEVP  Mandatory       Small   ODF 1.2 Evaluate 
STDEVP(values); verify population stddev.      IMPLEMENTED_UNVERIFIED
+SG-FN-093      6.20.21 SUBSTITUTE      Mandatory       Small   ODF 1.2 
Evaluate SUBSTITUTE("aaa","a","b"); verify "bbb".       IMPLEMENTED_UNVERIFIED
+SG-FN-094      6.16.61 SUM     Mandatory       Small   ODF 1.2 Evaluate 
SUM(1,2,3); verify 6.  IMPLEMENTED_UNVERIFIED
+SG-FN-095      6.16.62 SUMIF   Mandatory       Small   ODF 1.2 Evaluate 
SUMIF(range,criteria,sumrange); verify sum.    IMPLEMENTED_UNVERIFIED
+SG-FN-096      6.12.46 SYD     Mandatory       Small   ODF 1.2 Evaluate 
SYD(cost,salvage,life,period); verify depreciation.    IMPLEMENTED_UNVERIFIED
+SG-FN-097      6.20.22 T       Mandatory       Small   ODF 1.2 Evaluate 
T("abc"); verify "abc".        IMPLEMENTED_UNVERIFIED
+SG-FN-098      6.16.69 TAN     Mandatory       Small   ODF 1.2 Evaluate 
TAN(0); verify 0.      IMPLEMENTED_UNVERIFIED
+SG-FN-099      6.10.18 TIME    Mandatory       Small   ODF 1.2 Evaluate 
TIME(12,30,0); verify time serial.     IMPLEMENTED_UNVERIFIED
+SG-FN-100      6.10.20 TODAY   Mandatory       Small   ODF 1.2 Evaluate 
TODAY(); verify current date serial.   IMPLEMENTED_UNVERIFIED
+SG-FN-101      6.20.24 TRIM    Mandatory       Small   ODF 1.2 Evaluate TRIM(" 
a  b "); verify "a b".  IMPLEMENTED_UNVERIFIED
+SG-FN-102      6.15.9  TRUE    Mandatory       Small   ODF 1.2 Evaluate 
TRUE(); verify TRUE.   IMPLEMENTED_UNVERIFIED
+SG-FN-103      6.17.8  TRUNC   Mandatory       Small   ODF 1.2 Evaluate 
TRUNC(1.9); verify 1.  IMPLEMENTED_UNVERIFIED
+SG-FN-104      6.20.27 UPPER   Mandatory       Small   ODF 1.2 Evaluate 
UPPER("abc"); verify "ABC".    IMPLEMENTED_UNVERIFIED
+SG-FN-105      6.13.34 VALUE   Mandatory       Small   ODF 1.2 Evaluate 
VALUE("123"); verify 123.      IMPLEMENTED_UNVERIFIED
+SG-FN-106      6.18.82 VAR     Mandatory       Small   ODF 1.2 Evaluate 
VAR(values); verify sample variance.   IMPLEMENTED_UNVERIFIED
+SG-FN-107      6.18.84 VARP    Mandatory       Small   ODF 1.2 Evaluate 
VARP(values); verify population variance.      IMPLEMENTED_UNVERIFIED
+SG-FN-108      6.14.12 VLOOKUP Mandatory       Small   ODF 1.2 Evaluate 
VLOOKUP(value,table,col,range); verify result. IMPLEMENTED_UNVERIFIED
+SG-FN-109      6.10.21 WEEKDAY Mandatory       Small   ODF 1.2 Evaluate 
WEEKDAY(date); verify day number.      IMPLEMENTED_UNVERIFIED
+SG-FN-110      6.10.24 YEAR    Mandatory       Small   ODF 1.2 Evaluate 
YEAR(DATE(2025,3,15)); verify 2025.    IMPLEMENTED_UNVERIFIED
+SG-ALW-001     2.3.2.F References containing more than one area need not be 
evaluated  Optional        Small   ODF 1.4 Reference with multiple areas; may 
return error or partial result.      NOT_APPLICABLE
+SG-ALW-002     2.3.2.G Inline arrays need not be implemented   Optional        
Small   ODF 1.4 Use {1,2} inline array; may return error.       NOT_APPLICABLE
+SG-ALW-003     2.3.2.G Complex numbers need not be implemented Optional        
Small   ODF 1.4 Use COMPLEX function; may return error. NOT_APPLICABLE
+SG-ALW-004     2.3.2.G Reference union operator (~) need not be implemented    
Optional        Small   ODF 1.4 Use A1:B2~C3:D4; may return error.      
NOT_APPLICABLE
diff --git a/openformula-small-group-audit.md b/openformula-small-group-audit.md
index 647a2e5799..b6d387d5e8 100644
--- a/openformula-small-group-audit.md
+++ b/openformula-small-group-audit.md
@@ -33,46 +33,54 @@ Therefore **no conformance level (Small/Medium/Large) may 
be claimed for AOO Cal
 
 | ReqID | Requirement | Status | Source Evidence | Runtime Verified |
 |-------|-------------|--------|-----------------|-------------------|
-| SG-BL-001 | Formula length >= 1024 characters | **[CONFIRMED]** structurally 
| FormulaCompiler parses token arrays dynamically; no fixed 1024-char limit 
found in source | No |
-| SG-BL-002 | >= 30 parameters per function | **[CONFIRMED]** structurally | 
MustHaveParamCount validates exact counts; no 30-param cap found | No |
-| SG-BL-003 | Strings up to 32767 ASCII chars | **[UNVERIFIED]** | OUString 
used for strings; no specific 32767 limit found | No |
-| SG-BL-004 | >= 7 nesting levels of functions | **[CONFIRMED]** structurally 
| No nesting depth limit found in compiler/interpreter | No |
+| SG-BL-001 | Formula length >= 1024 characters | **UNVERIFIED** | 
FormulaCompiler parses token arrays dynamically; no fixed 1024-char limit found 
in source | No |
+| SG-BL-002 | >= 30 parameters per function | **UNVERIFIED** | 
MustHaveParamCount validates exact counts; no 30-param cap found | No |
+| SG-BL-003 | Strings up to 32767 ASCII chars | **UNVERIFIED** | OUString used 
for strings; no specific 32767 limit found | No |
+| SG-BL-004 | >= 7 nesting levels of functions | **UNVERIFIED** | No nesting 
depth limit found in compiler/interpreter | No |
 
-**Finding:** All basic limit requirements appear satisfied by the dynamic 
architecture (no hard-coded limits below the spec minimums). Runtime 
verification is outstanding for all four.
+**Finding:** The absence of hard-coded limits in source does **not** prove 
conformance. All four Basic Limits requirements are marked UNVERIFIED pending 
actual runtime tests.
 
 ---
 
 ## 3. Syntax (§2.3.2.B)
 
-| ReqID | Section | Requirement | Status | Source Evidence |
-|-------|---------|-------------|--------|-----------------|
-| SG-SYN-001 | 4.11.11 | Criteria syntax | **[CONFIRMED]** | Database 
functions (DSUM, DCOUNT, etc.) use criteria; interpr1.cxx implements 
DBSum/DBCount |
-| SG-SYN-002 | 5.2 | Basic Expressions | **[CONFIRMED]** | FormulaCompiler.cxx 
handles parenthesized expressions via RangeLine/IntersectionLine/UnaryLine |
-| SG-SYN-003 | 5.3 | Constant Numbers | **[CONFIRMED]** | FormulaCompiler.cxx 
tokenizes numeric literals |
-| SG-SYN-004 | 5.4 | Constant Strings | **[CONFIRMED]** | FormulaCompiler.cxx 
tokenizes string literals with quote escaping |
-| SG-SYN-005 | 5.5 | Operators precedence (Table 1) | **[CONFIRMED]** | 
FormulaCompiler.cxx:1203-1237 implements UnionLine -> IntersectionLine -> 
RangeLine -> UnaryLine -> binary ops |
-| SG-SYN-006 | 5.6 | Functions and parameters | **[CONFIRMED]** | 
FormulaCompiler.cxx compiles function calls with argument lists |
-| SG-SYN-007 | 5.7 | Nonstandard function names as errors | **[CONFIRMED]** | 
ocNoName opcode; xlformula.cxx uses ocNoName stubs |
-| SG-SYN-008 | 5.8 | References | **[CONFIRMED]** | compiler.cxx 
PopDoubleRef/PopSingleRef handle cell/range references |
-| SG-SYN-009 | 5.11 | Simple Named Expressions | **[CONFIRMED]** | 
compiler.cxx:NameLine handles named expressions; ocName opcode |
-| SG-SYN-010 | 5.12 | Errors | **[CONFIRMED]** | Error constants (ocErrNull 
through ocErrNA) in compiler.hrc; interpr1.cxx error handling |
-| SG-SYN-011 | 5.14 | Whitespace | **[CONFIRMED]** | ocSpaces converted to 
intersection at FormulaCompiler.cxx:830-831 |
-
-**Finding:** All syntax requirements are structurally supported by the 
parser/compiler. No gaps identified.
+| ReqID | Section | Requirement | Status | Source Evidence | Runtime Verified |
+|-------|---------|-------------|--------|-----------------|-------------------|
+| SG-SYN-001 | 4.11.11 | Criteria syntax | **UNVERIFIED** | Database functions 
(DSUM, DCOUNT, etc.) use criteria; interpr1.cxx implements DBSum/DBCount | No |
+| SG-SYN-002 | 5.2 | Basic Expressions | **UNVERIFIED** | FormulaCompiler.cxx 
handles parenthesized expressions via RangeLine/IntersectionLine/UnaryLine | No 
|
+| SG-SYN-003 | 5.3 | Constant Numbers | **UNVERIFIED** | FormulaCompiler.cxx 
tokenizes numeric literals | No |
+| SG-SYN-004 | 5.4 | Constant Strings | **UNVERIFIED** | FormulaCompiler.cxx 
tokenizes string literals with quote escaping | No |
+| SG-SYN-005 | 5.5 | Operators precedence (Table 1) | **UNVERIFIED** | 
FormulaCompiler.cxx:1203-1237 implements UnionLine -> IntersectionLine -> 
RangeLine -> UnaryLine -> binary ops | No |
+| SG-SYN-006 | 5.6 | Functions and parameters | **UNVERIFIED** | 
FormulaCompiler.cxx compiles function calls with argument lists | No |
+| SG-SYN-007 | 5.7 | Nonstandard function names as errors | **UNVERIFIED** | 
ocNoName opcode; xlformula.cxx uses ocNoName stubs | No |
+| SG-SYN-008 | 5.8 | References | **UNVERIFIED** | compiler.cxx 
PopDoubleRef/PopSingleRef handle cell/range references | No |
+| SG-SYN-009 | 5.11 | Simple Named Expressions | **UNVERIFIED** | 
compiler.cxx:NameLine handles named expressions; ocName opcode | No |
+| SG-SYN-010 | 5.12 | Errors | **UNVERIFIED** | Error constants (ocErrNull 
through ocErrNA) in compiler.hrc; interpr1.cxx error handling | No |
+| SG-SYN-011 | 5.14 | Whitespace | **UNVERIFIED** | ocSpaces converted to 
intersection at FormulaCompiler.cxx:830-831 | No |
+
+**Specific unverified grammar cases:**
+- Operator precedence and associativity (e.g., `2+3*4`, `2^3^2`) — parser 
structure exists but no runtime verification of correct precedence
+- Automatic intersection (whitespace between references) — ocSpaces → 
ocIntersect conversion at FormulaCompiler.cxx:830-831 exists but runtime 
behavior unverified
+- Reference union `~` — NOT required for Small Group (§2.3.2.G), so absence is 
acceptable
+- Quoted labels as implicit intersection (ODF 1.4 §3.9/§5.10) — not confirmed 
in source
+
+**Finding:** All syntax requirements have parser/compiler infrastructure 
present, but none have been verified at runtime against ODF 1.4 normative 
expected results.
 
 ---
 
 ## 4. Implicit Conversions (§2.3.2.C)
 
-| ReqID | Section | Requirement | Status | Source Evidence |
-|-------|---------|-------------|--------|-----------------|
-| SG-CONV-001 | 6.3.14 | Conversion to Text | **[CONFIRMED]** | 
ScInterpreter::GetString() (interpre.hxx:374), ScText() (interpr1.cxx) |
-| SG-CONV-002 | 6.3.5 | Conversion to Number | **[CONFIRMED]** | 
ScInterpreter::GetDouble() (interpre.hxx:370), ConvertStringToValue() 
(interpre.hxx:228) |
-| SG-CONV-003 | 4.8 | Reference conversion | **[CONFIRMED]** | 
ScInterpreter::GetCellValueOrZero() (interpre.hxx:231), 
PopSingleRef/PopDoubleRef |
-| SG-CONV-004 | 6.3.12 | Conversion to Logical | **[CONFIRMED]** | 
ScInterpreter::GetBool() returns GetDouble() != 0.0 (interpre.hxx:373) |
-| SG-CONV-005 | 5.12 | Error propagation | **[CONFIRMED]** | nGlobalError 
(interpre.hxx:196), SetError() (interpre.hxx:854), Push() substitutes 
FormulaErrorToken (interpre.hxx:263) |
+| ReqID | Section | Requirement | Status | Source Evidence | Runtime Verified |
+|-------|---------|-------------|--------|-----------------|-------------------|
+| SG-CONV-001 | 6.3.14 | Conversion to Text | **IMPLEMENTED_UNVERIFIED** | 
ScInterpreter::GetString() (interpre.hxx:374), ScText() (interpr1.cxx) | No |
+| SG-CONV-002 | 6.3.5 | Conversion to Number | **IMPLEMENTED_UNVERIFIED** | 
ScInterpreter::GetDouble() (interpre.hxx:370), ConvertStringToValue() 
(interpre.hxx:228) | No |
+| SG-CONV-003 | 4.8 | Reference conversion | **IMPLEMENTED_UNVERIFIED** | 
ScInterpreter::GetCellValueOrZero() (interpre.hxx:231), 
PopSingleRef/PopDoubleRef | No |
+| SG-CONV-004 | 6.3.12 | Conversion to Logical | **IMPLEMENTED_UNVERIFIED** | 
ScInterpreter::GetBool() returns GetDouble() != 0.0 (interpre.hxx:373) | No |
+| SG-CONV-005 | 5.12 | Error propagation | **IMPLEMENTED_UNVERIFIED** | 
nGlobalError (interpre.hxx:196), SetError() (interpre.hxx:854), Push() 
substitutes FormulaErrorToken (interpre.hxx:263) | No |
 
-**Finding:** All conversion requirements are implemented. Edge cases 
(locale-sensitive conversion, text-to-number with thousands separators) are 
impl-defined per ODF 1.4 and documented in openformula-semantics.md.
+**Distinction:** Implementation presence confirmed (conversion functions exist 
in source), but semantic conformance to ODF 1.4 conversion rules (locale 
sensitivity, edge cases, error conditions) is **unverified**.
+
+**Finding:** All conversion requirements have implementation entry points, but 
none have been verified at runtime against ODF 1.4 normative expected results.
 
 ---
 
@@ -82,20 +90,20 @@ All operators required by §2.3.2.D (all operators except 
reference union `~`) a
 
 | ReqID | Section | Operator | Status | Source |
 |-------|---------|----------|--------|--------|
-| SG-OP-001 | 6.4.9 | Ordered comparison (<, <=, >, >=) | **[CONFIRMED]** | 
interpr1.cxx:ScLess/ScLessEqual/ScGreater/ScGreaterEqual |
-| SG-OP-002 | 6.4.10 | Concatenation (&) | **[CONFIRMED]** | 
interpr5.cxx:ScAmpersand |
-| SG-OP-003 | 6.4.2 | Addition (+) | **[CONFIRMED]** | interpr5.cxx:ScAdd |
-| SG-OP-004 | 6.4.3 | Subtraction (-) | **[CONFIRMED]** | interpr5.cxx:ScSub |
-| SG-OP-005 | 6.4.4 | Multiplication (*) | **[CONFIRMED]** | 
interpr5.cxx:ScMul |
-| SG-OP-006 | 6.4.5 | Division (/) | **[CONFIRMED]** | interpr5.cxx:ScDiv; 
division by zero -> errDivisionByZero (interpre.hxx:955-959) |
-| SG-OP-007 | 6.4.6 | Power (^) | **[CONFIRMED]** | interpr5.cxx:ScPow; 
right-associative |
-| SG-OP-008 | 6.4.7 | Equality (=) | **[CONFIRMED]** | interpr1.cxx:ScEqual |
-| SG-OP-009 | 6.4.8 | Not equal (<>) | **[CONFIRMED]** | 
interpr1.cxx:ScNotEqual |
-| SG-OP-010 | 6.4.14 | Postfix % | **[CONFIRMED]** | 
interpr1.cxx:ScPercentSign |
-| SG-OP-011 | 6.4.15 | Prefix + | **[CONFIRMED]** | Unary plus handled by 
compiler; ocAdd with single operand |
-| SG-OP-012 | 6.4.16 | Prefix - | **[CONFIRMED]** | interpr1.cxx:ScNeg |
-| SG-OP-013 | 6.4.12 | Reference intersection (!) | **[CONFIRMED]** | 
interpr1.cxx:ScIntersect |
-| SG-OP-014 | 6.4.11 | Reference range (:) | **[CONFIRMED]** | 
interpr1.cxx:ScRangeFunc |
+| SG-OP-001 | 6.4.9 | Ordered comparison (<, <=, >, >=) | 
**IMPLEMENTED_UNVERIFIED** | 
interpr1.cxx:ScLess/ScLessEqual/ScGreater/ScGreaterEqual | No |
+| SG-OP-002 | 6.4.10 | Concatenation (&) | **IMPLEMENTED_UNVERIFIED** | 
interpr5.cxx:ScAmpersand | No |
+| SG-OP-003 | 6.4.2 | Addition (+) | **IMPLEMENTED_UNVERIFIED** | 
interpr5.cxx:ScAdd | No |
+| SG-OP-004 | 6.4.3 | Subtraction (-) | **IMPLEMENTED_UNVERIFIED** | 
interpr5.cxx:ScSub | No |
+| SG-OP-005 | 6.4.4 | Multiplication (*) | **IMPLEMENTED_UNVERIFIED** | 
interpr5.cxx:ScMul | No |
+| SG-OP-006 | 6.4.5 | Division (/) | **IMPLEMENTED_UNVERIFIED** | 
interpr5.cxx:ScDiv; division by zero -> errDivisionByZero 
(interpre.hxx:955-959) | No |
+| SG-OP-007 | 6.4.6 | Power (^) | **IMPLEMENTED_UNVERIFIED** | 
interpr5.cxx:ScPow; right-associative | No |
+| SG-OP-008 | 6.4.7 | Equality (=) | **IMPLEMENTED_UNVERIFIED** | 
interpr1.cxx:ScEqual | No |
+| SG-OP-009 | 6.4.8 | Not equal (<>) | **IMPLEMENTED_UNVERIFIED** | 
interpr1.cxx:ScNotEqual | No |
+| SG-OP-010 | 6.4.14 | Postfix % | **IMPLEMENTED_UNVERIFIED** | 
interpr1.cxx:ScPercentSign | No |
+| SG-OP-011 | 6.4.15 | Prefix + | **IMPLEMENTED_UNVERIFIED** | Unary plus 
handled by compiler; ocAdd with single operand | No |
+| SG-OP-012 | 6.4.16 | Prefix - | **IMPLEMENTED_UNVERIFIED** | 
interpr1.cxx:ScNeg | No |
+| SG-OP-013 | 6.4.12 | Reference intersection (!) | **IMPLEMENTED_UNVERIFIED** 
| interpr1.cxx:ScIntersect | No |
+| SG-OP-014 | 6.4.11 | Reference range (:) | **IMPLEMENTED_UNVERIFIED** | 
interpr1.cxx:ScRangeFunc | No |
 
 **Finding:** All 14 operator requirements are implemented. Reference union 
(`~`) is explicitly NOT required for Small Group (§2.3.2.G).
 
@@ -109,124 +117,14 @@ The Small Group requires 110 functions (§2.3.2.E). All 
110 have opcodes and imp
 
 | Status | Count | Description |
 |--------|-------|-------------|
-| IMPLEMENTED_MATCH | 110 | All 110 Small Group functions have opcodes, 
implementations, dispatch, and metadata |
-
-### Function detail (selected examples)
-
-| Function | Section | Opcode | Value | Implementation | Status |
-|----------|---------|--------|-------|----------------|--------|
-| ABS | 6.16.2 | ocAbs | 113 | interpr1.cxx:ScAbs | IMPLEMENTED_MATCH |
-| ACOS | 6.16.3 | ocArcCos | 87 | interpr1.cxx:ScArcCos | IMPLEMENTED_MATCH |
-| AND | 6.15.2 | ocAnd | 52 | interpr1.cxx:ScAnd | IMPLEMENTED_MATCH |
-| ASIN | 6.16.7 | ocArcSin | 86 | interpr1.cxx:ScArcSin | IMPLEMENTED_MATCH |
-| ATAN | 6.16.9 | ocArcTan | 88 | interpr1.cxx:ScArcTan | IMPLEMENTED_MATCH |
-| ATAN2 | 6.16.10 | ocArcTan2 | 201 | interpr2.cxx:ScArcTan2 | 
IMPLEMENTED_MATCH (ODF 1.4: ATAN2(0,0) impl-defined) |
-| AVERAGE | 6.18.3 | ocAverage | 226 | interpr1.cxx:ScAverage | 
IMPLEMENTED_MATCH |
-| AVERAGEIF | 6.18.5 | ocAverageIf | 395 | interpr1.cxx:ScAverageIf | 
IMPLEMENTED_MATCH |
-| CHOOSE | 6.14.3 | ocChose | 7 | interpr1.cxx:ScChose | IMPLEMENTED_MATCH |
-| COLUMNS | 6.13.5 | ocColumns | 252 | interpr1.cxx:ScColumns | 
IMPLEMENTED_MATCH |
-| COS | 6.16.19 | ocCos | 83 | interpr1.cxx:ScCos | IMPLEMENTED_MATCH |
-| COUNT | 6.13.6 | ocCount | 227 | interpr1.cxx:ScCount | IMPLEMENTED_MATCH |
-| COUNTA | 6.13.7 | ocCount2 | 228 | interpr1.cxx:ScCount2 | IMPLEMENTED_MATCH 
(ODF 1.4 empty-cell semantics changed) |
-| COUNTBLANK | 6.13.8 | ocCountEmptyCells | 282 | 
interpr1.cxx:ScCountEmptyCells | IMPLEMENTED_MATCH (ODF 1.4: "" case 
impl-defined) |
-| COUNTIF | 6.13.9 | ocCountIf | 283 | interpr1.cxx:ScCountIf | 
IMPLEMENTED_MATCH |
-| DATE | 6.10.2 | ocGetDate | 218 | interpr2.cxx:ScGetDate | IMPLEMENTED_MATCH 
(ODF 1.4: pre-1583 impl-defined) |
-| DAVERAGE | 6.9.2 | ocDBAverage | 270 | interpr1.cxx:ScDBAverage | 
IMPLEMENTED_MATCH |
-| DAY | 6.10.5 | ocGetDay | 108 | interpr2.cxx:ScGetDay | IMPLEMENTED_MATCH |
-| DCOUNT | 6.9.3 | ocDBCount | 268 | interpr1.cxx:ScDBCount | 
IMPLEMENTED_MATCH |
-| DCOUNTA | 6.9.4 | ocDBCount2 | 269 | interpr1.cxx:ScDBCount2 | 
IMPLEMENTED_MATCH |
-| DDB | 6.12.14 | ocGDA | 246 | interpr2.cxx:ScGDA | IMPLEMENTED_MATCH |
-| DEGREES | 6.16.25 | ocDeg | 80 | interpr2.cxx:ScDeg | IMPLEMENTED_MATCH |
-| DGET | 6.9.5 | ocDBGet | 271 | interpr1.cxx:ScDBGet | IMPLEMENTED_MATCH |
-| DMAX | 6.9.6 | ocDBMax | 272 | interpr1.cxx:ScDBMax | IMPLEMENTED_MATCH |
-| DMIN | 6.9.7 | ocDBMin | 273 | interpr1.cxx:ScDBMin | IMPLEMENTED_MATCH |
-| DPRODUCT | 6.9.8 | ocDBProduct | 274 | interpr1.cxx:ScDBProduct | 
IMPLEMENTED_MATCH |
-| DSTDEV | 6.9.9 | ocDBStdDev | 275 | interpr1.cxx:ScDBStdDev | 
IMPLEMENTED_MATCH |
-| DSTDEVP | 6.9.10 | ocDBStdDevP | 276 | interpr1.cxx:ScDBStdDevP | 
IMPLEMENTED_MATCH |
-| DSUM | 6.9.11 | ocDBSum | 267 | interpr1.cxx:ScDBSum | IMPLEMENTED_MATCH |
-| DVAR | 6.9.12 | ocDBVar | 277 | interpr1.cxx:ScDBVar | IMPLEMENTED_MATCH |
-| DVARP | 6.9.13 | ocDBVarP | 278 | interpr1.cxx:ScDBVarP | IMPLEMENTED_MATCH |
-| EVEN | 6.16.30 | ocEven | 144 | interpr2.cxx:ScEven | IMPLEMENTED_MATCH |
-| EXACT | 6.20.8 | ocExact | 296 | interpr1.cxx:ScExact | IMPLEMENTED_MATCH |
-| EXP | 6.16.31 | ocExp | 102 | interpr1.cxx:ScExp | IMPLEMENTED_MATCH |
-| FACT | 6.16.32 | ocFact | 105 | interpr3.cxx:ScFact | IMPLEMENTED_MATCH |
-| FALSE | 6.15.3 | ocFalse | 68 | interpr1.cxx:ScFalse | IMPLEMENTED_MATCH |
-| FIND | 6.20.9 | ocFind | 295 | interpr1.cxx:ScFind | IMPLEMENTED_MATCH |
-| FV | 6.12.20 | ocZW | 257 | interpr2.cxx:ScZW | IMPLEMENTED_MATCH |
-| HLOOKUP | 6.14.5 | ocHLookup | 287 | interpr1.cxx:ScHLookup | 
IMPLEMENTED_MATCH (ODF 1.4: unsorted data impl-defined) |
-| HOUR | 6.10.11 | ocGetHour | 109 | interpr2.cxx:ScGetHour | 
IMPLEMENTED_MATCH |
-| IF | 6.15.4 | ocIf | 6 | interpr1.cxx:ScIfJump | IMPLEMENTED_MATCH (lazy 
evaluation via jumps) |
-| INDEX | 6.14.6 | ocIndex | 290 | interpr1.cxx:ScIndex | IMPLEMENTED_MATCH 
(ODF 1.4: row-vector single-arg now error — Milestone A fix) |
-| INT | 6.17.2 | ocInt | 114 | interpr2.cxx:ScInt | IMPLEMENTED_MATCH |
-| IRR | 6.12.24 | ocIRR | 230 | interpr2.cxx:ScIRR | IMPLEMENTED_MATCH |
-| ISBLANK | 6.13.14 | ocIsEmpty | 117 | interpr1.cxx:ScIsEmpty | 
IMPLEMENTED_MATCH |
-| ISERR | 6.13.15 | ocIsErr | 127 | interpr1.cxx:ScIsErr | IMPLEMENTED_MATCH |
-| ISERROR | 6.13.16 | ocIsError | 128 | interpr1.cxx:ScIsError | 
IMPLEMENTED_MATCH |
-| ISLOGICAL | 6.13.19 | ocIsLogical | 120 | interpr1.cxx:ScIsLogical | 
IMPLEMENTED_MATCH (complex-number case impl-defined) |
-| ISNA | 6.13.20 | ocIsNA | 126 | interpr1.cxx:ScIsNV | IMPLEMENTED_MATCH |
-| ISNONTEXT | 6.13.21 | ocIsNonString | 119 | interpr1.cxx:ScIsNonString | 
IMPLEMENTED_MATCH |
-| ISNUMBER | 6.13.22 | ocIsValue | 124 | interpr1.cxx:ScIsValue | 
IMPLEMENTED_MATCH (complex-number case impl-defined) |
-| ISTEXT | 6.13.25 | ocIsString | 118 | interpr1.cxx:ScIsString | 
IMPLEMENTED_MATCH |
-| LEFT | 6.20.12 | ocLeft | 297 | interpr1.cxx:ScLeft | IMPLEMENTED_MATCH |
-| LEN | 6.20.13 | ocLen | 139 | interpr1.cxx:ScLen | IMPLEMENTED_MATCH |
-| LN | 6.16.39 | ocLn | 103 | interpr1.cxx:ScLn | IMPLEMENTED_MATCH |
-| LOG | 6.16.40 | ocLog | 208 | interpr2.cxx:ScLog | IMPLEMENTED_MATCH |
-| LOG10 | 6.16.41 | ocLog10 | 143 | interpr1.cxx:ScLog10 | IMPLEMENTED_MATCH |
-| LOWER | 6.20.14 | ocLower | 138 | interpr1.cxx:ScLower | IMPLEMENTED_MATCH |
-| MATCH | 6.14.9 | ocMatch | 281 | interpr1.cxx:ScMatch | IMPLEMENTED_MATCH |
-| MAX | 6.18.45 | ocMax | 223 | interpr1.cxx:ScMax | IMPLEMENTED_MATCH (ODF 
1.4: 0 parameters impl-defined) |
-| MID | 6.20.15 | ocMid | 300 | interpr1.cxx:ScMid | IMPLEMENTED_MATCH |
-| MIN | 6.18.48 | ocMin | 222 | interpr1.cxx:ScMin | IMPLEMENTED_MATCH (ODF 
1.4: 0 parameters impl-defined) |
-| MINUTE | 6.10.13 | ocGetMin | 110 | interpr2.cxx:ScGetMin | 
IMPLEMENTED_MATCH |
-| MOD | 6.16.42 | ocMod | 212 | interpr5.cxx:ScMod | IMPLEMENTED_MATCH |
-| MONTH | 6.10.14 | ocGetMonth | 107 | interpr2.cxx:ScGetMonth | 
IMPLEMENTED_MATCH |
-| N | 6.13.26 | ocN | 131 | interpr1.cxx:ScN | IMPLEMENTED_MATCH (ODF 1.4: 
text case impl-defined) |
-| NA | 6.13.27 | ocNotAvail | 71 | interpr1.cxx (via ScNA) | IMPLEMENTED_MATCH 
|
-| NOT | 6.15.7 | ocNot | 60 | interpr1.cxx:ScNot | IMPLEMENTED_MATCH |
-| NOW | 6.10.16 | ocGetActTime | 70 | interpr2.cxx:ScGetActTime | 
IMPLEMENTED_MATCH |
-| NPER | 6.12.29 | ocZZR | 258 | interpr2.cxx:ScZZR | IMPLEMENTED_MATCH 
(trailing-empty-param rule documented) |
-| NPV | 6.12.30 | ocNPV | 229 | interpr2.cxx:ScNPV | IMPLEMENTED_MATCH |
-| ODD | 6.16.44 | ocOdd | 145 | interpr2.cxx:ScOdd | IMPLEMENTED_MATCH |
-| OR | 6.15.8 | ocOr | 53 | interpr1.cxx:ScOr | IMPLEMENTED_MATCH |
-| PI | 6.16.45 | ocPi | 65 | interpr1.cxx:ScPi | IMPLEMENTED_MATCH |
-| PMT | 6.12.36 | ocRMZ | 251 | interpr2.cxx:ScRMZ | IMPLEMENTED_MATCH |
-| POWER | 6.16.46 | ocPower | 209 | interpr2.cxx:ScPower | IMPLEMENTED_MATCH 
(ODF 1.4: POWER(0,0) impl-defined) |
-| PRODUCT | 6.16.47 | ocProduct | 225 | interpr1.cxx:ScProduct | 
IMPLEMENTED_MATCH |
-| PROPER | 6.20.16 | ocPropper | 137 | interpr1.cxx:ScPropper | 
IMPLEMENTED_MATCH |
-| PV | 6.12.41 | ocBW | 244 | interpr2.cxx:ScBW | IMPLEMENTED_MATCH |
-| RADIANS | 6.16.49 | ocRad | 81 | interpr2.cxx:ScRad | IMPLEMENTED_MATCH |
-| RATE | 6.12.42 | ocZins | 259 | interpr2.cxx:ScZins | IMPLEMENTED_MATCH |
-| REPLACE | 6.20.17 | ocReplace | 293 | interpr1.cxx:ScReplace | 
IMPLEMENTED_MATCH |
-| REPT | 6.20.18 | ocRept | 303 | interpr1.cxx:ScRept | IMPLEMENTED_MATCH |
-| RIGHT | 6.20.19 | ocRight | 298 | interpr1.cxx:ScRight | IMPLEMENTED_MATCH |
-| ROUND | 6.17.5 | ocRound | 204 | interpr2.cxx:ScRound | IMPLEMENTED_MATCH |
-| ROWS | 6.13.30 | ocRows | 253 | interpr1.cxx:ScRows | IMPLEMENTED_MATCH |
-| SECOND | 6.10.17 | ocGetSec | 111 | interpr2.cxx:ScGetSec | 
IMPLEMENTED_MATCH |
-| SIN | 6.16.55 | ocSin | 82 | interpr1.cxx:ScSin | IMPLEMENTED_MATCH |
-| SLN | 6.12.45 | ocLIA | 250 | interpr2.cxx:ScLIA | IMPLEMENTED_MATCH |
-| SQRT | 6.16.58 | ocSqrt | 104 | interpr1.cxx:ScSqrt | IMPLEMENTED_MATCH |
-| STDEV | 6.18.72 | ocStDev | 233 | interpr3.cxx | IMPLEMENTED_MATCH |
-| STDEVP | 6.18.74 | ocStDevP | 234 | interpr3.cxx | IMPLEMENTED_MATCH |
-| SUBSTITUTE | 6.20.21 | ocSubstitute | 302 | interpr1.cxx:ScSubstitute | 
IMPLEMENTED_MATCH |
-| SUM | 6.16.61 | ocSum | 224 | interpr1.cxx:ScSum | IMPLEMENTED_MATCH |
-| SUMIF | 6.16.62 | ocSumIf | 284 | interpr1.cxx:ScSumIf | IMPLEMENTED_MATCH |
-| SYD | 6.12.46 | ocDIA | 245 | interpr2.cxx:ScDIA | IMPLEMENTED_MATCH |
-| T | 6.20.22 | ocT | 140 | interpr1.cxx:ScT | IMPLEMENTED_MATCH |
-| TAN | 6.16.69 | ocTan | 84 | interpr1.cxx:ScTan | IMPLEMENTED_MATCH |
-| TIME | 6.10.18 | ocGetTime | 219 | interpr2.cxx:ScGetTime | 
IMPLEMENTED_MATCH |
-| TODAY | 6.10.20 | ocGetActDate | 69 | interpr2.cxx:ScGetActDate | 
IMPLEMENTED_MATCH |
-| TRIM | 6.20.24 | ocTrim | 135 | interpr1.cxx:ScTrim | IMPLEMENTED_MATCH |
-| TRUE | 6.15.9 | ocTrue | 67 | interpr1.cxx:ScTrue | IMPLEMENTED_MATCH |
-| TRUNC | 6.17.8 | ocTrunc | 207 | interpr2.cxx:ScTrunc | IMPLEMENTED_MATCH |
-| UPPER | 6.20.27 | ocUpper | 136 | interpr1.cxx:ScUpper | IMPLEMENTED_MATCH |
-| VALUE | 6.13.34 | ocValue | 141 | interpr1.cxx:ScValue | IMPLEMENTED_MATCH 
(ODF 1.4: non-text impl-defined) |
-| VAR | 6.18.82 | ocVar | 231 | interpr3.cxx | IMPLEMENTED_MATCH |
-| VARP | 6.18.84 | ocVarP | 232 | interpr3.cxx | IMPLEMENTED_MATCH |
-| VLOOKUP | 6.14.12 | ocVLookup | 286 | interpr1.cxx:ScVLookup | 
IMPLEMENTED_MATCH (ODF 1.4: unsorted data impl-defined) |
-| WEEKDAY | 6.10.21 | ocGetDayOfWeek | 366 | interpr2.cxx:ScGetDayOfWeek | 
IMPLEMENTED_MATCH |
-| YEAR | 6.10.24 | ocGetYear | 106 | interpr2.cxx:ScGetYear | 
IMPLEMENTED_MATCH |
-
-**Note:** IFNA (§6.15.6) and SKEWP (§6.18.68) were implemented in Milestone B 
but are NOT Small Group functions — IFNA is Large Group only, SKEWP is Medium 
Group only.
+| IMPLEMENTED_UNVERIFIED | 110 | All 110 Small Group functions have opcodes, 
implementations, dispatch entries, and metadata, but runtime semantics have NOT 
been verified against ODF 1.4. Implementation presence confirmed; semantic 
equivalence not established. |
+| IMPLEMENTED_MATCH | 0 | No function has been verified as semantically 
matching ODF 1.4 at runtime. |
+| PARTIAL | 0 | None identified in this audit. |
+| MISSING | 0 | All 110 required functions are present in source. |
+| MAPPING_ONLY | 0 | None identified in this audit. |
+| NOT_APPLICABLE | 4 | The four explicit allowances (§2.3.2.F/G) - inline 
arrays, complex numbers, multi-area references, reference union (~). |
+
+**Key conceptual distinction:** An opcode, evaluator implementation, dispatch 
entry, and function metadata establish **implementation presence**, not 
**semantic equivalence**. All 110 functions are marked IMPLEMENTED_UNVERIFIED 
because no runtime tests have been executed against the ODF 1.4 normative 
expected results.
 
 ---
 
@@ -247,14 +145,14 @@ The Small Group requires 110 functions (§2.3.2.E). All 
110 have opcodes and imp
 
 | Category | Total | Status | Count |
 |----------|-------|--------|-------|
-| Basic Limits | 4 | CONFIRMED structurally / UNVERIFIED runtime | 4 
confirmed, 0 missing |
-| Syntax | 11 | CONFIRMED | 11 confirmed, 0 missing |
-| Conversions | 5 | CONFIRMED | 5 confirmed, 0 missing |
-| Operators | 14 | CONFIRMED | 14 confirmed, 0 missing |
-| Functions | 110 | IMPLEMENTED_MATCH | 110 implemented, 0 missing |
+| Basic Limits | 4 | UNVERIFIED runtime | 0 verified, 4 UNVERIFIED |
+| Syntax | 11 | UNVERIFIED runtime | 0 verified, 11 UNVERIFIED |
+| Conversions | 5 | IMPLEMENTED_UNVERIFIED | 0 verified, 5 UNVERIFIED |
+| Operators | 14 | IMPLEMENTED_UNVERIFIED | 0 verified, 14 UNVERIFIED |
+| Functions | 110 | IMPLEMENTED_UNVERIFIED | 0 verified, 110 UNVERIFIED |
 | Allowances | 4 | Documented | 4 documented |
 
-**Grand total: 148 requirements, 0 missing, 0 partial.**
+**Grand total: 148 requirements, 0 runtime-verified, 148 UNVERIFIED.**
 
 ---
 
@@ -262,8 +160,8 @@ The Small Group requires 110 functions (§2.3.2.E). All 110 
have opcodes and imp
 
 | Function/Area | Section | AOO Behavior | ODF 1.4 Normative | Severity | 
Source |
 
|---------------|---------|-------------|-------------------|----------|--------|
-| INDEX row-vector single-arg | 6.14.6 | Returns column (legacy) | Error (ODF 
1.4 removed rule) | Fixed in Milestone A | interpr1.cxx; KNOWN-LIMITATIONS:71 |
-| CONVERT atm | 6.16.18 | 101324.996583 Pa | 101325.1 Pa | Fixed in Milestone 
C | interpr2.cxx; KNOWN-LIMITATIONS:72 |
+| INDEX row-vector single-arg | 6.14.6 | Returns error (Milestone A fix: 
removed ODF 1.3 row-vector shortcut) | Error (ODF 1.4 removed rule) | Fixed in 
Milestone A; regression risk | interpr1.cxx; KNOWN-LIMITATIONS:71 |
+| CONVERT atm | 6.16.18 | 101325.1 Pa (Milestone C fix: corrected from 
101324.996583 Pa) | 101325.1 Pa | Fixed in Milestone C | interpr2.cxx; 
KNOWN-LIMITATIONS:72 |
 | DATE pre-1583 | 6.10.2 | #VALUE! before 15 Oct 1582 | Support from 1583; 
earlier impl-defined | Documented impl-defined | interpr2.cxx; 
IMPLEMENTATION-DEFINED:155 |
 | COUNTA empty cells | 6.13.7 | ODF 1.3 semantics | ODF 1.4 changed empty-cell 
handling | UNVERIFIED | interpr1.cxx:ScCount2 |
 | COUNTBLANK "" | 6.13.8 | Unverified | ODF 1.4: "" case impl-defined | 
UNVERIFIED | interpr1.cxx:ScCountEmptyCells |
diff --git a/openformula-small-group-test-plan.md 
b/openformula-small-group-test-plan.md
new file mode 100644
index 0000000000..de13966e96
--- /dev/null
+++ b/openformula-small-group-test-plan.md
@@ -0,0 +1,90 @@
+# OpenFormula 1.4 Small Group Test Plan
+
+## Purpose
+
+Establish reproducible ODF 1.4 Part 4 Small Group conformance tests before 
making any
+implementation changes. Tests are prepared for later execution once the 
implementation
+milestones are complete. No production evaluator changes are made in this 
milestone.
+
+## Test Files
+
+| File | Purpose |
+|------|---------|
+| `test/odf-validate/openformula-small-group-1.4.tsv` | Requirement-referenced 
test inventory (148 ReqIDs from D inventory) |
+| `test/odf-validate/calcval-cases14.tsv` | Existing calcval cases, extended 
with Small Group semantic tests |
+| `openformula-small-group-test-plan.md` | This document: execution 
instructions and outstanding runtime requirements |
+
+## Execution Instructions
+
+### Prerequisites
+
+A configured AOO build tree is required. The `sc` and `scaddins` modules must 
be built:
+
+1. Configure AOO (`autogen.sh`/`configure`, then `build.pl --all`)
+2. Build the `sc` module (Calc core)
+3. Build the `scaddins` module (Analysis Add-in for CONVERT)
+
+### Running calcval Tests
+
+The `test/odf-validate/` directory contains the calcval test harness (designed 
for macOS):
+
+```bash
+# Start the calcval server
+test/odf-validate/start.sh calcval <port>
+
+# Run test cases
+test/odf-validate/runpy.sh calcval.py <port> calcval-cases14.tsv <out.json>
+
+# Compare results
+python3 -I calcval.py --compare <out.json> <expected.json>
+```
+
+### Test Case Format
+
+Each calcval case has 5 tab-separated columns:
+1. **id**: Unique test identifier
+2. **formula**: AOO API syntax (English function names, ';' separators)
+3. **mode**: `cell` (plain cell), `cell@N` (scratch cell), `array[:CxR]` 
(array formula)
+4. **expected**: Expected result ('-', number with tolerance, '#N/A', '#ERR', 
's:text')
+5. **note**: Normative section reference and description
+
+### Priority Order for Test Execution
+
+| Priority | Area | Test Cases | Rationale |
+|----------|------|------------|-----------|
+| 1 | COUNTA/COUNTBLANK empty cells | `COUNTA.range`, `COUNTA.text`, 
`COUNTBLANK.range` | ODF 1.4 changed empty-cell semantics; can silently alter 
spreadsheet results |
+| 2 | DATE pre-1583 | `DATE.pre1583` | ODF 1.4 §7.4 impl-defined; verify AOO 
behavior |
+| 3 | INDEX row-vector | `INDEX.rowvec.single`, `INDEX.rowvec.colarg`, 
`INDEX.row.outrange` | Milestone A fix; regression risk for legacy documents |
+| 4 | Bitwise functions | `BITLSHIFT.neg`, `BITRSHIFT.neg`, `BITAND.3params` | 
Parameter count and negative shift behavior |
+| 5 | Parser/operators | `SYN-005-precedence`, `SYN-005-power`, `OP-006-div0` 
| Operator precedence and associativity |
+
+## Outstanding Runtime Requirements
+
+The following cannot be verified until a configured AOO build tree exists:
+
+| Requirement | Reason |
+|-------------|--------|
+| All 4 Basic Limits (§3.7) | No runtime test execution possible |
+| All 11 Syntax items (§5) | No runtime test execution possible |
+| All 5 Implicit Conversions (§6.3) | No runtime test execution possible |
+| All 14 Operators (§6.4) | No runtime test execution possible |
+| All 110 Functions (§2.3.2.E) | No runtime test execution possible |
+| ODF save/reload round-trip | No built office available |
+| Excel import/export | No built office available |
+
+## Relationship to Milestones
+
+- **Milestone D**: Established the 110-function Small Group inventory
+- **Milestone D.1**: Corrected audit inconsistencies (statuses = 
IMPLEMENTED_UNVERIFIED)
+- **Milestone E (this)**: Created test inventory and test cases
+- **Milestone F**: Implement confirmed semantic corrections (narrowly scoped)
+- **Milestone G**: ODF import/export and round-trip conformance
+- **Milestone H**: Final consolidated verification
+
+## What Must NOT Change
+
+- No production evaluator changes in this milestone
+- No new runtime dependencies
+- No mandatory `sc` or `scaddins` builds during this milestone
+- Tests use existing `test/odf-validate` tooling and `calcval-cases14.tsv` 
conventions
+- Tests are NOT added to the normal production build
diff --git a/openformula-test-gap-analysis.md b/openformula-test-gap-analysis.md
index 80122d75c3..934dc77367 100644
--- a/openformula-test-gap-analysis.md
+++ b/openformula-test-gap-analysis.md
@@ -39,10 +39,10 @@ Source-of-truth: `test/aoo-test/`, `test/odf-validate/`, 
and AOO source. Finding
 - **[CONFIRMED]** EASTERSUNDAY: implemented (`interpr2.cxx:261`) but NOT in 
either function inventory. No dedicated test coverage confirmed.
 
 **[CONFIRMED] IFNA and SKEWP are no longer missing functions.** Both were 
implemented in Milestone B. The test inventories list them as standard ODF 
functions, which is now correct.
-
 ### Missing semantic tests
-- No confirmed semantic test for CONVERT `atm` discrepancy (101324.996583 Pa 
vs ODF 1.4 1.0132510E+5).
-- No confirmed semantic test for INDEX row-vector single-argument (ODF 1.4: 
error; AOO: returns column).
+
+- No confirmed semantic test for CONVERT `atm` (fixed in Milestone C: 101325.1 
Pa vs old 101324.996583 Pa).
+- No confirmed semantic test for INDEX row-vector single-argument (fixed in 
Milestone A: ODF 1.4 error vs old column return).
 - No confirmed semantic test for DATE pre-1583 (#VALUE! before 15 Oct 1582; 
proleptic Gregorian for YEAR/MONTH/DAY).
 - No confirmed semantic test for BITAND/BITOR/BITXOR/BITLSHIFT/BITRSHIFT 
variadic params or negative-shift handling (interpr1.cxx:1231-1234 appears 
inverted).
 - No confirmed semantic test for short-circuit AND/OR.
@@ -55,10 +55,10 @@ Source-of-truth: `test/aoo-test/`, `test/odf-validate/`, 
and AOO source. Finding
 ### Missing ODF round-trip tests
 - No confirmed round-trip test verifying function names written on ODF export 
(e.g. `ORG.OPENOFFICE.CURRENT` vs `CURRENT`, `ORG.OPENOFFICE.ERRORTYPE` vs 
`ERROR.TYPE`, `ORG.OPENOFFICE.EASTERSUNDAY` vs `EASTERSUNDAY`, 
`ORG.OPENOFFICE.STYLE` vs `STYLE`, `ORG.OPENOFFICE.MULTIRANGE` vs `~`, 
`MULTIRANGE` legacy).
 - `odf_docs/ODF14-KNOWN-LIMITATIONS-PUBLIC.md` notes formula cells with error 
results written as `office:value-type="string"` (ODF 1.4 adds `error` type) — 
no confirmed round-trip test for error value type.
-
 ### Existing tests that produce false confidence
-- `openformula-functions.txt` lists IFNA/SKEWP as standard ODF 1.2 functions, 
but AOO does not implement them — a test that only checks "name in inventory" 
passes while implementation is absent.
-- Inventories are ODF 1.2, so they do not flag ODF 1.4 regressions (INDEX 
row-vector, CONVERT atm, COUNTA empty cells).
+
+- `openformula-functions.txt` lists IFNA/SKEWP as standard ODF 1.2 functions; 
AOO now implements them (Milestone B), so this is no longer a false-negative 
for conformance.
+- Inventories are ODF 1.2, so they do not flag ODF 1.4 regressions (INDEX 
row-vector fixed in Milestone A, CONVERT atm fixed in Milestone C, COUNTA empty 
cells).
 
 ## 3. Proposed versioned test inventory
 
diff --git a/test/odf-validate/calcval-cases14.tsv 
b/test/odf-validate/calcval-cases14.tsv
index 1da4185ca4..b58761e57c 100644
--- a/test/odf-validate/calcval-cases14.tsv
+++ b/test/odf-validate/calcval-cases14.tsv
@@ -142,3 +142,13 @@ IFNA.range =IFNA(D1:D3;99) cell    10      6.x range 
reference, implicit intersection ta
 SKEWP.two      =SKEWP(1;2)     cell    0       6.x two observations, 
non-constant, zero skewness
 SKEW.text      =SKEW(1;"text";2)       cell    0       6.x regression: direct 
scalar text skipped, {1,2} symmetric
 SKEW.err       =SKEW(1/0)      cell    #ERR    6.x regression: error argument 
propagates
+COUNTA.range   =COUNTA(D1:D3)  cell    3       6.13.7 COUNTA over numeric 
range (D1:D3=10,20,30)
+COUNTA.text    =COUNTA(E1:E3)  cell    3       6.13.7 COUNTA over text range 
(E1:E3=y,x,y)
+COUNTBLANK.range       =COUNTBLANK(D1:D3)      cell    0       6.13.8 
COUNTBLANK over range with no empty cells
+DATE.pre1583   =DATE(1500;1;1) cell    #ERR    6.10.2 DATE before 1583: 
impl-defined #VALUE!
+INDEX.rowvec.single    =INDEX(H1:L1;3) cell    #ERR    6.14.6 INDEX row vector 
single arg: ODF 1.4 error (Milestone A fix)
+INDEX.rowvec.colarg    =INDEX(H1:L1;;3)        cell    30      6.14.6 INDEX 
row vector with column arg only (col 3 of H1:L1=10,20,30,40,50)
+INDEX.row.outrange     =INDEX(D1:D5;6) cell    #ERR    6.14.6 INDEX row out of 
range
+BITLSHIFT.neg  =BITLSHIFT(8;-1)        cell    4       6.6.3 BITLSHIFT 
negative shift count reverses direction
+BITRSHIFT.neg  =BITRSHIFT(8;-1)        cell    16      6.6.5 BITRSHIFT 
negative shift count reverses direction
+BITAND.3params =BITAND(6;3;1)  cell    #ERR    6.6.2 BITAND exactly 2 params 
enforced
diff --git a/test/odf-validate/openformula-small-group-1.4.tsv 
b/test/odf-validate/openformula-small-group-1.4.tsv
new file mode 100644
index 0000000000..9b9c8f8d64
--- /dev/null
+++ b/test/odf-validate/openformula-small-group-1.4.tsv
@@ -0,0 +1,79 @@
+# OpenFormula 1.4 Small Group semantic test inventory.
+# Columns (tab separated): ReqID, Section, TestID, Formula, Expected, Actual, 
Status, Note
+# ReqID: References openformula-small-group-1.4.tsv requirement ID
+# Section: ODF 1.4 Part 4 section
+# TestID: Unique test identifier
+# Formula: AOO API syntax (English function names, ';' separators), leading '='
+# Expected: Expected result per ODF 1.4 normative text ('-', number, '#N/A', 
'#ERR', 's:text')
+# Actual: Actual result from calcval execution (leave empty if not yet tested)
+# Status: UNVERIFIED, PASSED, FAILED
+# Note: Additional context
+
+# ===== Basic Limits (§3.7) =====
+SG-BL-001      3.7     BL-001-1024chars        =REPT("a";1024) s:aaa...a (1024 
a's)    -       UNVERIFIED      Formula length: 1024 characters
+SG-BL-002      3.7     BL-002-30params 
=MAX(1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30)
  30      -       UNVERIFIED      30 parameters in MAX
+SG-BL-003      3.7     BL-003-32767chars       =REPT("a";32767)        
s:aaa...a (32767 a's)   -       UNVERIFIED      String of 32767 ASCII characters
+SG-BL-004      3.7     BL-004-7nesting 
=IF(IF(IF(IF(IF(IF(TRUE;1;2);3;4);5;6);7;8);9;10)       10      -       
UNVERIFIED      7 nesting levels of IF
+
+# ===== Syntax (§5) =====
+SG-SYN-002     5.2     SYN-002-parens  =(2+3)*4        20      -       
UNVERIFIED      Parenthesized expression evaluation order
+SG-SYN-003     5.3     SYN-003-decimal =1.5    1.5     -       UNVERIFIED      
Decimal number literal
+SG-SYN-003     5.3     SYN-003-sci     =1.5e2  150     -       UNVERIFIED      
Scientific notation literal
+SG-SYN-004     5.4     SYN-004-string  ="hello"        s:hello -       
UNVERIFIED      String literal
+SG-SYN-004     5.4     SYN-004-quote   ="he said ""hi"""       s:he said "hi"  
-       UNVERIFIED      Quote escaping in string
+SG-SYN-005     5.5     SYN-005-precedence      =2+3*4  14      -       
UNVERIFIED      Operator precedence: * before +
+SG-SYN-005     5.5     SYN-005-power   =2^3^2  512     -       UNVERIFIED      
Power operator right-associativity
+SG-SYN-006     5.6     SYN-006-func    =ABS(-5)        5       -       
UNVERIFIED      Function call with argument
+SG-SYN-007     5.7     SYN-007-nonstandard     =NONEXISTENT()  #ERR    -       
UNVERIFIED      Nonstandard function name error
+SG-SYN-008     5.8     SYN-008-ref     =A1     10      -       UNVERIFIED      
Cell reference (A1=10 per data setup)
+SG-SYN-008     5.8     SYN-008-range   =SUM(D1:D3)     60      -       
UNVERIFIED      Range reference (D1:D3 = 10,20,30)
+SG-SYN-009     5.11    SYN-009-named   =MYNAME -       -       UNVERIFIED      
Simple named expression (name must be defined)
+SG-SYN-010     5.12    SYN-010-error   =NA()   #N/A    -       UNVERIFIED      
Error constant #N/A
+SG-SYN-011     5.14    SYN-011-whitespace      =2 + 3 * 4      14      -       
UNVERIFIED      Whitespace does not affect evaluation
+
+# ===== Operators (§6.4) =====
+SG-OP-001      6.4.9   OP-001-lt       =1<2    TRUE    -       UNVERIFIED      
Less than
+SG-OP-001      6.4.9   OP-001-le       =2<=2   TRUE    -       UNVERIFIED      
Less than or equal
+SG-OP-001      6.4.9   OP-001-gt       =3>2    TRUE    -       UNVERIFIED      
Greater than
+SG-OP-001      6.4.9   OP-001-ge       =2>=2   TRUE    -       UNVERIFIED      
Greater than or equal
+SG-OP-002      6.4.10  OP-002-concat   ="a"&"b"        s:ab    -       
UNVERIFIED      String concatenation
+SG-OP-003      6.4.2   OP-003-add      =2+3    5       -       UNVERIFIED      
Addition
+SG-OP-004      6.4.3   OP-004-sub      =5-3    2       -       UNVERIFIED      
Subtraction
+SG-OP-005      6.4.4   OP-005-mul      =2*3    6       -       UNVERIFIED      
Multiplication
+SG-OP-006      6.4.5   OP-006-div      =6/3    2       -       UNVERIFIED      
Division
+SG-OP-006      6.4.5   OP-006-div0     =1/0    #ERR    -       UNVERIFIED      
Division by zero error
+SG-OP-007      6.4.6   OP-007-pow      =2^3    8       -       UNVERIFIED      
Power
+SG-OP-008      6.4.7   OP-008-eq       =2=2    TRUE    -       UNVERIFIED      
Equality
+SG-OP-009      6.4.8   OP-009-ne       =2<>3   TRUE    -       UNVERIFIED      
Not equal
+SG-OP-010      6.4.14  OP-010-pct      =50%    0.5     -       UNVERIFIED      
Postfix percent
+SG-OP-011      6.4.15  OP-011-pos      =+5     5       -       UNVERIFIED      
Prefix plus
+SG-OP-012      6.4.16  OP-012-neg      =-5     -5      -       UNVERIFIED      
Prefix minus
+SG-OP-013      6.4.12  OP-013-intersect        =A1:C3!B1:D2    -       -       
UNVERIFIED      Reference intersection
+SG-OP-014      6.4.11  OP-014-range    =SUM(A1:A3)     -       -       
UNVERIFIED      Reference range
+
+# ===== Implicit Conversions (§6.3) =====
+SG-CONV-001    6.3.14  CONV-001-text   =TEXT(123;"0")  s:123   -       
UNVERIFIED      Number to text conversion
+SG-CONV-002    6.3.5   CONV-002-number =VALUE("123")   123     -       
UNVERIFIED      Text to number conversion
+SG-CONV-003    4.8     CONV-003-ref    =N(A1)  10      -       UNVERIFIED      
Reference to scalar conversion (A1=10)
+SG-CONV-004    6.3.12  CONV-004-logical        =N(TRUE)        1       -       
UNVERIFIED      Logical to number conversion
+SG-CONV-004    6.3.12  CONV-004-logical2       =IF(0;TRUE;FALSE)       FALSE   
-       UNVERIFIED      Number to logical conversion (0 = FALSE)
+SG-CONV-005    5.12    CONV-005-error  =ISERR(1/0)     TRUE    -       
UNVERIFIED      Error propagation: division by zero
+
+# ===== Functions (§6.x) — Priority 1: COUNTA/COUNTBLANK empty cells =====
+SG-FN-013      6.13.7  FN-013-COUNTA-empty     =COUNTA(D1:D3)  3       -       
UNVERIFIED      COUNTA over range with numbers (D1:D3=10,20,30)
+SG-FN-013      6.13.7  FN-013-COUNTA-text      =COUNTA(E1:E3)  3       -       
UNVERIFIED      COUNTA over range with text (E1:E3="y","x","y")
+SG-FN-014      6.13.8  FN-014-COUNTBLANK-empty =COUNTBLANK(D1:D3)      0       
-       UNVERIFIED      COUNTBLANK over range with no empty cells
+SG-FN-014      6.13.8  FN-014-COUNTBLANK-empty-str     =COUNTBLANK(E1:E3)      
0       -       UNVERIFIED      COUNTBLANK over range with text (not empty)
+
+# ===== Functions (§6.x) — Priority 2: DATE pre-1583 =====
+SG-FN-016      6.10.2  FN-016-DATE-pre1583     =DATE(1500;1;1) #ERR    -       
UNVERIFIED      DATE before 1583: impl-defined, AOO returns #VALUE!
+SG-FN-067      6.13.27 FN-067-NA       =NA()   #N/A    -       UNVERIFIED      
NA function returns #N/A error
+
+# ===== Functions (§6.x) — Priority 3: INDEX =====
+SG-FN-042      6.14.6  FN-042-INDEX-2d =INDEX(D1:F3;2;3)       -       -       
UNVERIFIED      INDEX two-dimensional: row 2, col 3 of D1:F3
+SG-FN-042      6.14.6  FN-042-INDEX-row-outrange       =INDEX(D1:D5;6) #ERR    
-       UNVERIFIED      INDEX row out of range
+SG-FN-042      6.14.6  FN-042-INDEX-rowvec-single      =INDEX(H1:L1;3) #ERR    
-       UNVERIFIED      INDEX row vector single arg: ODF 1.4 error (Milestone A 
fix)
+SG-FN-042      6.14.6  FN-042-INDEX-rowvec-colarg      =INDEX(H1:L1;;3)        
-       -       UNVERIFIED      INDEX row vector with column arg only
+
+# ===== Operators — reference intersection =====
+SG-OP-013      6.4.12  OP-013-intersect-num    =SUM(A1:C3!B1:D2)       -       
-       UNVERIFIED      Reference intersection in SUM

Reply via email to