package mulCal.equationParser; import static junit.framework.Assert.assertEquals; import static mulCal.equationParser.Tokenize.toTokens; import java.math.BigDecimal; import java.util.List; import mulCal.currency.Currency; import mulCal.equationParser.Tokenize.Token; import mulCal.history.History; import mulCal.settings.Settings; import mulCal.util.KeyException; import org.junit.Test; public class EvalSpecialTest { @Test public void testEvalSpecial() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); history.Add("1+1", new BigDecimal("2")); history.Add("A*3", new BigDecimal("6")); // create token list List<Token> tokens = toTokens("1+2"); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 3); assertEquals(result.get(0).text, "1"); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); assertEquals(result.get(1).text, "+"); assertEquals(result.get(1).type, Tokenize.TokenType.OPERATOR); assertEquals(result.get(2).text, "2"); assertEquals(result.get(2).type, Tokenize.TokenType.NUMBER); } @Test public void testEvalSpecialConstants() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); // create token list List<Token> tokens = toTokens("1+PI"); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 3); assertEquals(result.get(0).text, "1"); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); assertEquals(result.get(1).text, "+"); assertEquals(result.get(1).type, Tokenize.TokenType.OPERATOR); assertEquals(result.get(2).text, "3.14159265"); assertEquals(result.get(2).type, Tokenize.TokenType.NUMBER); } @Test public void testEvalSpecialHistory() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); history.Add("1+1", new BigDecimal("2")); history.Add("A*3", new BigDecimal("6")); // create token list List<Token> tokens = toTokens("A+B"); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 3); assertEquals(result.get(0).text, "2"); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); assertEquals(result.get(1).text, "+"); assertEquals(result.get(1).type, Tokenize.TokenType.OPERATOR); assertEquals(result.get(2).text, "6"); assertEquals(result.get(2).type, Tokenize.TokenType.NUMBER); } @Test(expected=KeyException.class) public void testEvalSpecialFail() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); history.Add("1+1", new BigDecimal("2")); history.Add("A*3", new BigDecimal("6")); // create token list List<Token> tokens = toTokens("A+C"); // eval evalSpecial.eval(tokens, history); } @Test public void testCurrency() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); // create token list List<Token> tokens = toTokens("[m 1.0 GBP MYR]"); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 1); assertEquals(result.get(0).text, "4.90"); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); } @Test public void testCalendar() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); // create token list List<Token> tokens = toTokens("[d weeks 2000/1/1 2000/1/15]"); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 1); assertEquals(result.get(0).text, "2"); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); } @Test public void testCalendar2() throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); // create token list List<Token> tokens = toTokens("[d days 2000/1/1 2000/1/15]"); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 1); assertEquals(result.get(0).text, "14"); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); } public void helperCalendar(String input, String expectedAnswer) throws Exception { Settings settings = new Settings(); Currency currency = new Currency(settings); EvalSpecial evalSpecial = new EvalSpecial(currency); // create history History history = new History(); // create token list List<Token> tokens = toTokens(input); // eval List<Token> result = evalSpecial.eval(tokens, history); assertEquals(result.size(), 1); assertEquals(result.get(0).text, expectedAnswer); assertEquals(result.get(0).type, Tokenize.TokenType.NUMBER); } @Test public void testCalendarLots() throws Exception { helperCalendar("[d days 2000/1/1 2000/1/1]","0"); helperCalendar("[d days 2000/1/1 2000/1/2]","1"); helperCalendar("[d days 2000/1/1 2000/2/1]","31"); helperCalendar("[d days 2001/1/1 2002/1/1]","365"); helperCalendar("[d weeks 2001/1/1 2002/1/1]","52"); helperCalendar("[d weeks 2000/1/1 2000/1/1]","0"); helperCalendar("[d weeks 2000/1/1 2000/1/7]","0"); helperCalendar("[d weeks 2000/1/1 2000/1/8]","1"); helperCalendar("[d weeks 2000/1/1 2000/2/1]","4"); helperCalendar("[d months 2001/1/1 2002/1/1]","12"); helperCalendar("[d months 2000/1/1 2000/1/1]","0"); helperCalendar("[d months 2000/1/1 2000/1/31]","0"); helperCalendar("[d months 2000/1/1 2000/2/1]","1"); helperCalendar("[d months 2000/1/1 2010/1/1]","120"); helperCalendar("[d years 2000/1/1 2000/1/1]","0"); helperCalendar("[d years 2000/1/1 2000/12/31]","0"); helperCalendar("[d years 2000/1/1 2001/1/1]","1"); helperCalendar("[d years 2000/1/1 2010/1/1]","10"); } }