blob: b787f5e6c67f9b32d152bf43cf760deac72fe782 [file] [log] [blame]
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml.FormulaParsing;
using Rhino.Mocks;
namespace EPPlusTest.FormulaParsing.IntegrationTests
{
[TestClass]
public class BasicCalcTests : FormulaParserTestBase
{
[TestInitialize]
public void Setup()
{
var excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>();
_parser = new FormulaParser(excelDataProvider);
}
[TestMethod]
public void ShouldAddIntegersCorrectly()
{
var result = _parser.Parse("1 + 2");
Assert.AreEqual(3d, result);
}
[TestMethod]
public void ShouldSubtractIntegersCorrectly()
{
var result = _parser.Parse("2 - 1");
Assert.AreEqual(1d, result);
}
[TestMethod]
public void ShouldMultiplyIntegersCorrectly()
{
var result = _parser.Parse("2 * 3");
Assert.AreEqual(6d, result);
}
[TestMethod]
public void ShouldDivideIntegersCorrectly()
{
var result = _parser.Parse("8 / 4");
Assert.AreEqual(2d, result);
}
[TestMethod]
public void ShouldDivideDecimalWithIntegerCorrectly()
{
var result = _parser.Parse("2.5/2");
Assert.AreEqual(1.25d, result);
}
[TestMethod]
public void ShouldHandleExpCorrectly()
{
var result = _parser.Parse("2 ^ 4");
Assert.AreEqual(16d, result);
}
[TestMethod]
public void ShouldHandleExpWithDecimalCorrectly()
{
var result = _parser.Parse("2.5 ^ 2");
Assert.AreEqual(6.25d, result);
}
[TestMethod]
public void ShouldMultiplyDecimalWithDecimalCorrectly()
{
var result = _parser.Parse("2.5 * 1.5");
Assert.AreEqual(3.75d, result);
}
[TestMethod]
public void ThreeGreaterThanTwoShouldBeTrue()
{
var result = _parser.Parse("3 > 2");
Assert.IsTrue((bool)result);
}
[TestMethod]
public void ThreeLessThanTwoShouldBeFalse()
{
var result = _parser.Parse("3 < 2");
Assert.IsFalse((bool)result);
}
[TestMethod]
public void ThreeLessThanOrEqualToThreeShouldBeTrue()
{
var result = _parser.Parse("3 <= 3");
Assert.IsTrue((bool)result);
}
[TestMethod]
public void ThreeLessThanOrEqualToTwoDotThreeShouldBeFalse()
{
var result = _parser.Parse("3 <= 2.3");
Assert.IsFalse((bool)result);
}
[TestMethod]
public void ThreeGreaterThanOrEqualToThreeShouldBeTrue()
{
var result = _parser.Parse("3 >= 3");
Assert.IsTrue((bool)result);
}
[TestMethod]
public void TwoDotTwoGreaterThanOrEqualToThreeShouldBeFalse()
{
var result = _parser.Parse("2.2 >= 3");
Assert.IsFalse((bool)result);
}
[TestMethod]
public void TwelveAndTwelveShouldBeEqual()
{
var result = _parser.Parse("2=2");
Assert.IsTrue((bool)result);
}
[TestMethod]
public void TenPercentShouldBe0Point1()
{
var result = _parser.Parse("10%");
Assert.AreEqual(0.1, result);
}
[TestMethod]
public void ShouldHandleMultiplePercentSigns()
{
var result = _parser.Parse("10%%");
Assert.AreEqual(0.001, result);
}
[TestMethod]
public void ShouldHandlePercentageOnFunctionResult()
{
var result = _parser.Parse("SUM(1;2;3)%");
Assert.AreEqual(0.06, result);
}
[TestMethod]
public void ShouldHandlePercentageOnParantethis()
{
var result = _parser.Parse("(1+2)%");
Assert.AreEqual(0.03, result);
}
[TestMethod]
public void ShouldIgnoreLeadingPlus()
{
var result = _parser.Parse("+(1-2)");
Assert.AreEqual(-1d, result);
}
[TestMethod]
public void ShouldHandleDecimalNumberWhenDividingIntegers()
{
var result = _parser.Parse("224567455/400000000*500000");
Assert.AreEqual(280709.31875, result);
}
[TestMethod]
public void ShouldNegateExpressionInParenthesis()
{
var result = _parser.Parse("-(1+2)");
Assert.AreEqual(-3d, result);
}
}
}