The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# Test cases from Open Formula Specification 1.2 pp324ff
# OpenFormula-v1.2-draft7.odtOpenFormula-v1.2-draft7.odt
# Copyright (C) OASIS Open 2006. All Rights Reserved

use strict;
use warnings;
use lib ('lib', 't/lib');

use SheetTest;
use Test::More tests => 27;

run_tests(against => 't/data/openformula-testsuite.txt');

__DATA__

# Simple average. 
set A101 formula AVERAGE(2,4)
test A101 3

# Negative numbers are smaller than positive numbers. 
set A102 formula MAX(2,4,1,-8)
test A102 4

# The maximum of (2,3) is 3. 
set A103 formula MAX(B4:B5)
test A103 3

# Inline errors are propagated. 
set A104 formula ISNA(MAX(NA()))
test A104 1

# Strings are not converted to numbers and are ignored. 
set A105 formula MAX(B3:B5)
test A105 3

# Strings are not converted to numbers and are ignored. 
set A106 formula MAX(-1,B7)
test A106 -1

# Errors inside ranges are NOT ignored. 
set A107 formula MAX(B3:B9)
iserror A107 

# Negative numbers are smaller than positive numbers. 
set A108 formula MIN(2,4,1,-8)
test A108 -8

# The minimum of (2,3) is 2. 
set A109 formula MIN(B4:B5)
test A109 2

# If no numbers are provided in all ranges, MIN returns 0 
set A110 formula MIN(B3)
test A110 0

# Non-numbers inline are NOT ignored. 
set A111 formula MIN("a")
TODO iserror A111 

# Cell text is not converted to numbers and is ignored. 
set A112 formula MIN(B3:B5)
test A112 2

# The sample standard deviation of (2,4) is SQRT(2). 
set A113 formula STDEV(2,4)/SQRT(2)
test A113 1

# The sample standard deviation of (2,3) is 1/SQRT(2). 
set A114 formula STDEV(B4:B5)*SQRT(2)
isnear A114 1.000000

# Strings are not converted to numbers and are ignored. 
set A115 formula STDEV(B3:B5)*SQRT(2)
isnear A114 1.000000

# Ensure that implementations use a reasonably stable way of calculating STDEV. 
set A116 formula STDEV(10000000001,10000000002,10000000003,10000000004,10000000005,10000000006,10000000007,10000000008,10000000009,10000000010)
isnear A116 3.027650

# At least two numbers must be included 
set A117 formula STDEV(1)
iserror A117 

# The standard deviation of the set for (2,4) is 1. 
set A118 formula STDEVP(2,4)
test A118 1

# The standard deviation of the set for (2,3) is 0.5
set A119 formula STDEVP(B4:B5)*2
test A119 1

# Strings are not converted to numbers and are ignored. 
set A120 formula STDEVP(B3:B5)*2 
test A120 1

# STDEVP(1) is 0. 
set A121 formula STDEVP(1)
test A121 0

# The sample variance of (2,4) is 2. 
set A122 formula VAR(2,4)
test A122 2

# The sample variance of (2,3) is 0.5
set A123 formula VAR(B4:B5)*2 
test A123 1

# Strings are not converted to numbers and are ignored. 
set A124 formula VAR(B3:B5)*2 
test A124 1

# The variance of the set for (2,4) is 1. 
set A125 formula VARP(2,4)
test A125 1

# The variance of the set for (2,3) is 0.25
set A126 formula VARP(B4:B5)*4 
test A126 1

# Strings are not converted to numbers and are ignored. 
set A127 formula VARP(B3:B5)*4 
test A127 1