def test_concatenate(self): p = Parser(debug=True) ret = p.parse( 'CONCAT("The"," ","sun"," ","will"," ","come"," ","up"," ","tomorrow.")' ) self.assertEqual(ret['result'], 'The sun will come up tomorrow.') self.assertEqual(ret['error'], None)
def test_arrays(self): p = Parser(debug=True) ret = p.parse('2/{1;2;4}') self.assertEqual(ret['result'], [2, 1, 0.5]) self.assertEqual(ret['error'], None) ret = p.parse('{1;2;4}/2') self.assertEqual(ret['result'], [0.5, 1, 2]) self.assertEqual(ret['error'], None) ret = p.parse('{1;2;4}*2') self.assertEqual(ret['result'], [2, 4, 8]) self.assertEqual(ret['error'], None) ret = p.parse('2*{1;2;4}') self.assertEqual(ret['result'], [2, 4, 8]) self.assertEqual(ret['error'], None) ret = p.parse('2+{1;2;4}') self.assertEqual(ret['result'], [3, 4, 6]) self.assertEqual(ret['error'], None) ret = p.parse('{1;2;4}+2') self.assertEqual(ret['result'], [3, 4, 6]) self.assertEqual(ret['error'], None) ret = p.parse('2-{1;2;4}') self.assertEqual(ret['result'], [1, 0, -2]) self.assertEqual(ret['error'], None) ret = p.parse('{1;2;4}-2') self.assertEqual(ret['result'], [-1, 0, 2]) self.assertEqual(ret['error'], None)
def test_averagif(self): p = Parser(debug=True) ret = p.parse('AVERAGEIF({1;2;3;4};">2")') self.assertEqual(ret['result'], 3.5) self.assertEqual(ret['error'], None) ret = p.parse('AVERAGEIF({1;2;3;4};">2";{4;3;2;1})') self.assertEqual(ret['result'], 1.5) self.assertEqual(ret['error'], None)
def test_min(self): p = Parser(debug=True) ret = p.parse('MIN({1;3};0)') self.assertEqual(ret['result'], 0) self.assertEqual(ret['error'], None) ret = p.parse('MIN({1;2;3})') self.assertEqual(ret['result'], 1) self.assertEqual(ret['error'], None)
def test_iferror(self): p = Parser(debug=True) ret = p.parse('IFERROR(1/0,1)') self.assertEqual(ret['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('IFERROR("notme",1)') self.assertEqual(ret['result'], "notme") self.assertEqual(ret['error'], None)
def test_asinh(self): p = Parser(debug=True) ret = p.parse('ASINH(-2.5)') self.assertTrue(['result'], -1.647231146) self.assertEqual(ret['error'], None) ret = p.parse('ASINH(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_sinh(self): p = Parser(debug=True) ret = p.parse('2.868*SINH(0.0342*1.03)') self.assertTrue(['result'], 0.1010491) self.assertEqual(ret['error'], None) ret = p.parse('SINH(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_acoth(self): p = Parser(debug=True) ret = p.parse('ACOTH(6)') self.assertTrue(str(ret['result']).startswith('0.168')) self.assertEqual(ret['error'], None) ret = p.parse('ACOTH(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_atan(self): p = Parser(debug=True) ret = p.parse('ATAN(1)*180/PI()') self.assertTrue(['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('ATAN(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_tanh(self): p = Parser(debug=True) ret = p.parse('TANH(0.5)') self.assertTrue(['result'], 0.462117) self.assertEqual(ret['error'], None) ret = p.parse('TANH(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_cosh(self): p = Parser(debug=True) ret = p.parse('COSH(4)') self.assertTrue(['result'], 27.308233) self.assertEqual(ret['error'], None) ret = p.parse('COSH(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_date(self): p = Parser(debug=True) ret = p.parse('DATE(2020;10;12)') self.assertEqual(ret['result'], datetime.datetime(2020, 10, 12)) self.assertEqual(ret['error'], None) ret = p.parse('DATE(95;10;12)') self.assertEqual(ret['result'], datetime.datetime(1995, 10, 12)) self.assertEqual(ret['error'], None)
def test_second(self): p = Parser(debug=True) ret = p.parse('SECOND("10:04:11")') self.assertEqual(ret['result'], 11) self.assertEqual(ret['error'], None) ret = p.parse('SECOND(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_minute(self): p = Parser(debug=True) ret = p.parse('MINUTE("10:04:11")') self.assertEqual(ret['result'], 4) self.assertEqual(ret['error'], None) ret = p.parse('MINUTE(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_hour(self): p = Parser(debug=True) ret = p.parse('HOUR("10:04:11")') self.assertEqual(ret['result'], 10) self.assertEqual(ret['error'], None) ret = p.parse('HOUR(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_radians(self): p = Parser(debug=True) ret = p.parse('RADIANS(270)') self.assertTrue(str(ret['result']).startswith('4.7123')) self.assertEqual(ret['error'], None) ret = p.parse('RADIANS(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_degrees(self): p = Parser(debug=True) ret = p.parse('DEGREES(PI())') self.assertEqual(ret['result'], 180) self.assertEqual(ret['error'], None) ret = p.parse('DEGREES(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_atanh(self): p = Parser(debug=True) ret = p.parse('ATANH(0.76159416)') self.assertTrue(['result'], 1.00000001) self.assertEqual(ret['error'], None) ret = p.parse('ATANH(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_sin(self): p = Parser(debug=True) ret = p.parse('SIN(PI()/2)') self.assertTrue(['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('SIN(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_sqrt(self): p = Parser(debug=True) ret = p.parse('SQRT(16)') self.assertTrue(['result'], 4) self.assertEqual(ret['error'], None) ret = p.parse('SQRT(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_asin(self): p = Parser(debug=True) ret = p.parse('ASIN(-0.5)') self.assertTrue(['result'], -0.523598776) self.assertEqual(ret['error'], None) ret = p.parse('ASIN(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_round(self): p = Parser(debug=True) ret = p.parse('ROUND(23.7825, 2)') self.assertEqual(ret['result'], 23.78) self.assertEqual(ret['error'], None) ret = p.parse('ROUND(23.789, 2)') self.assertEqual(ret['result'], 23.79) self.assertEqual(ret['error'], None)
def test_cos(self): p = Parser(debug=True) ret = p.parse('COS(0)') self.assertTrue(['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('COS(1/0)') self.assertEqual(ret['result'], None) self.assertEqual(ret['error'], '#DIV/0!')
def test_ln(self): p = Parser(debug=True) ret = p.parse('LN(EXP(1))') self.assertEqual(ret['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('LN(EXP(3))') self.assertEqual(ret['result'], 3) self.assertEqual(ret['error'], None)
def test_not(self): p = Parser(debug=True) ret = p.parse('NOT(TRUE())') self.assertEqual(ret['result'], False) self.assertEqual(ret['error'], None) ret = p.parse('NOT(FALSE())') self.assertEqual(ret['result'], True) self.assertEqual(ret['error'], None)
def test_log(self): p = Parser(debug=True) ret = p.parse('LOG(10)') self.assertEqual(ret['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('LOG(8, 2)') self.assertEqual(ret['result'], 3) self.assertEqual(ret['error'], None)
def test_averagea(self): p = Parser(debug=True) ret = p.parse('AVERAGEA(1;"2")') self.assertEqual(ret['result'], 1.5) self.assertEqual(ret['error'], None) ret = p.parse('AVERAGEA(1;"2";TRUE;TRUE)') self.assertEqual(ret['result'], 1.25) self.assertEqual(ret['error'], None)
def test_log10(self): p = Parser(debug=True) ret = p.parse('LOG10(10)') self.assertEqual(ret['result'], 1) self.assertEqual(ret['error'], None) ret = p.parse('LOG10(100000)') self.assertEqual(ret['result'], 5) self.assertEqual(ret['error'], None)
def test_max(self): p = Parser(debug=True) ret = p.parse('MAX({1;3};4)') self.assertEqual(ret['result'], 4) self.assertEqual(ret['error'], None) ret = p.parse('MAX({1;2;3})') self.assertEqual(ret['result'], 3) self.assertEqual(ret['error'], None)
def test_sumif(self): p = Parser(debug=True) ret = p.parse('SUMIF({1;4;5}, ">0")') self.assertEqual(ret['result'], 10) self.assertEqual(ret['error'], None) ret = p.parse('SUMIF({1;4;5}, ">1")') self.assertEqual(ret['result'], 9) self.assertEqual(ret['error'], None)