Skip to content

Commit

Permalink
Merge pull request #50 from bartlomiej-gora/release/3.2.0
Browse files Browse the repository at this point in the history
Release/3.2.0
  • Loading branch information
bartgora authored Jun 23, 2017
2 parents 23de8a3 + c6562c4 commit 193b59b
Show file tree
Hide file tree
Showing 38 changed files with 499 additions and 153 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ script:
- jdk_switcher use oraclejdk8
- mvn clean cobertura:cobertura
before_install:
- wget -O ~/codacy-coverage-reporter-assembly-latest.jar $(curl https://api.github.com/repos/codacy/codacy-coverage-reporter/releases/latest | jq -r .assets[0].browser_download_url)
- wget curl https://api.github.com/repos/codacy/codacy-coverage-reporter/releases/latest | jq -r .assets[0].browser_download_url

after_success:
- java -cp ~/codacy-coverage-reporter-assembly-latest.jar com.codacy.CodacyCoverageReporter -l Java -r target/site/cobertura/coverage.xml
56 changes: 51 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
RPNCalculator - Reverse Polish Notation mathematics Library
RPNLibrary - Reverse Polish Notation Library
Copyright (C) 2011 Bartłomiej Góra

This program is free software: you can redistribute it and/or modify
Expand All @@ -25,11 +25,11 @@
<img src="https://api.codacy.com/project/badge/Grade/94cbf471a20048989c9b066f6ad4d414"/></a>
<a href="https://www.codacy.com/app/bartlomiej.gora/RPNLibrary?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=bartlomiej-gora/RPNLibrary&amp;utm_campaign=Badge_Coverage"><img src="https://api.codacy.com/project/badge/Coverage/94cbf471a20048989c9b066f6ad4d414"/></a>

[![Maven Central](https://img.shields.io/badge/maven%20central-3.1.0-brightgreen.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.bartlomiej-gora/RPNLibrary)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.bartlomiej-gora/RPNLibrary/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.bartlomiej-gora/RPNLibrary)


Description:
====
===
Simple RPN (Reverse Polish Notation) Library for Java.<br>
It is based on Dijkstra Algorithm. (https://en.wikipedia.org/wiki/Reverse_Polish_notation)

Expand All @@ -41,7 +41,7 @@ Sin, cos, tg, ctg.

example:
```java
pl.bgora.rpn.Calculator calc = Calculator.createDefaultCalculator();
Calculator calc = Calculator.createDefaultCalculator();
BigDecimal result = calc.calculate("2^3*(12/6)+18/3+5.0/2");
```

Expand All @@ -64,7 +64,7 @@ Changelog:


Added package pl.bgora.rpn.advanced</br>
Added pl.bgora.rpn.advanced.AdvancedCalculatorFactory</br>
Added AdvancedCalculatorFactory</br>


The advanced Calculator works with CalculationEngine, which uses strategy pattern to run.
Expand All @@ -79,6 +79,7 @@ pl.bgora.rpn.AbstractFunctionStrategy</br>
AdvancedCalculatorFactory advancedCalculatorFactory = new AdvancedCalculatorFactory();
calc = advancedCalculatorFactory.createCalulator();
```

### Example 2:

Assume that you want to add a function sqrt(number), which will return The square root , You will have to extend
Expand Down Expand Up @@ -136,3 +137,48 @@ And then you can add your function like that:
engine.addFunctionStartegy(new MaxFunctionStrategy());
calc = advancedCalculatorFactory.createCalulator(engine);
```

### Version 3.2.0:

<b>IMPORTANT:</b></br>
Changed package names from
```java
pl.bgora.rpn
```
to
```java
com.github.bgora.rpnlibrary
```

<b>Fixed bug, that prevented from exucuting functions with multiple parameters.</b>

<b>New functions:</b></br>
max() - takes two parameters, returns greater one</br>
min() - take two parameters, returns less one</br>
fib() - Fibonacci number</br>

<b>Refactor:</b>

Changed <i>createCalulator</i>, and <i> getDefaultEngine</i> to use <i>CalculationEngine</i> interface

```java
/**
* Creates AdvanceCalculator with given CalculatorEngine
*
* @param engine CalculationEngine implementation
* @return AdvanceCalculator
*/
public CalculatorInterface createCalulator(CalculationEngine engine) {
return new AdvancedCalculator(RoundingMode.HALF_UP, engine);
}


/**
* Return default CalculationEngine implementation
*
* @return CalculatorEngine
*/
public CalculationEngine getDefaultEngine() {
return new CalculatorEngine(StrategiesUtil.DEFAULT_OPERATORS, StrategiesUtil.DEFAULT_FUNCTIONS);
}
```
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.bartlomiej-gora</groupId>
<artifactId>RPNLibrary</artifactId>
<version>3.1.0</version>
<version>3.2.0</version>
<packaging>jar</packaging>

<distributionManagement>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* RPNCalculator - Reverse Polish Notation mathematics Library
* RPNLibrary - Reverse Polish Notation Library
* Copyright (C) 2011 Bartłomiej Góra
*
* This program is free software: you can redistribute it and/or modify
Expand All @@ -17,10 +17,10 @@
* Contact: bartlomiej.gora@gmail.com
*/

package pl.bgora.rpn;
package com.github.bgora.rpnlibrary;

import pl.bgora.rpn.advanced.functions.AbstractFunctionStrategy;
import pl.bgora.rpn.advanced.operators.AbstractOperatorStrategy;
import com.github.bgora.rpnlibrary.advanced.functions.AbstractFunctionStrategy;
import com.github.bgora.rpnlibrary.advanced.operators.AbstractOperatorStrategy;

/**
* Interface tha declares additional operations for new CalculationEngine
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* RPNCalculator - Reverse Polish Notation mathematics Library
* RPNLibrary - Reverse Polish Notation Library
* Copyright (C) 2011 Bartłomiej Góra
*
* This program is free software: you can redistribute it and/or modify
Expand All @@ -17,10 +17,10 @@
* Contact: bartlomiej.gora@gmail.com
*/

package pl.bgora.rpn;
package com.github.bgora.rpnlibrary;

import pl.bgora.rpn.exceptions.NoSuchFunctionFound;
import pl.bgora.rpn.exceptions.WrongArgumentException;
import com.github.bgora.rpnlibrary.exceptions.NoSuchFunctionFound;
import com.github.bgora.rpnlibrary.exceptions.WrongArgumentException;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand Down Expand Up @@ -95,15 +95,15 @@ public static Calculator createDefaultCalculator(RoundingMode mode) {
* Factory method for RPN Calculator object with custom functions, and
* operations. You should use this factory method if you want to create your
* own operations. To do so, you have to implement you own objectst, that
* implementas {@code pl.bgora.rpn.RPNChecking}, and
* {@code pl.bgora.rpn.RPNExecuting}.
* implementas {@code RPNChecking}, and
* {@code RPNExecuting}.
*
* @param mode Rounding Mode for calculations.
* @param checker Custom Checker object.
* @param executioner custom executioner object
* @return new Instance of {@code pl.bgora.Calculator}
* @see pl.bgora.rpn.RPNChecking
* @see pl.bgora.rpn.RPNExecuting
* @see RPNChecking
* @see RPNExecuting
*/
public static Calculator createCalculator(RoundingMode mode, RPNChecking checker, RPNExecuting executioner) {
return new Calculator(checker, executioner, mode);
Expand All @@ -113,8 +113,8 @@ public static Calculator createCalculator(RoundingMode mode, RPNChecking checker
/**
* Constructor Creates an instance of the class.
*
* @param checker Object that implementa RPNChecking - Used for checking operations in input.
* @param executioner Object iplementing RPNExecuting - used for executing operations on input.
* @param checker Object implementing RPNChecking - Used for checking operations in input.
* @param executioner Object implementing RPNExecuting - used for executing operations on input.
* @param mode Rounding mode for arithmetic operations.
*/
protected Calculator(RPNChecking checker, RPNExecuting executioner, RoundingMode mode) {
Expand All @@ -137,7 +137,7 @@ public BigDecimal calculate(final String input) throws WrongArgumentException, N
* @param input Input string.
* @return Formatted String.
* @throws WrongArgumentException Thrown if the input is incorrect (Incorrect format, or
* unsupported opertians)
* unsupported operations)
*/
private String prepareInput(String input) throws WrongArgumentException {
StringBuilder result = new StringBuilder();
Expand All @@ -148,14 +148,10 @@ private String prepareInput(String input) throws WrongArgumentException {
boolean lastWasOperator = false;
boolean lastWasWhiteSpace = false;
boolean lastWasLetter = false;
// Iteration throght input String.
// Iteration thought input String.
for (int i = 0; i < length; i++) {
c = inputValue.charAt(i);
if ((Character.isDigit(c) || c == '.' || c == ',') && (lastWasDigit || !lastWasOperator)) {
//for BigDecimal
if (c == ',') {
c = '.';
}
if (isDigitOrSeparator(c) && (lastWasDigit || !lastWasOperator)) {
lastWasDigit = true;
result.append(c);
lastWasWhiteSpace = false;
Expand Down Expand Up @@ -210,6 +206,10 @@ private String prepareInput(String input) throws WrongArgumentException {
return result.toString().trim();
}

private boolean isDigitOrSeparator(char c) {
return Character.isDigit(c) || c == '.' || c == ',';
}

/**
* Creates String in Reverse Polish Notation.
*
Expand Down Expand Up @@ -325,8 +325,10 @@ private BigDecimal getResult(String result) throws WrongArgumentException, NoSuc
} else if (checker.isFunction(temp)) {
int count = checker.getFunctionParamsCount(temp);
String[] table = new String[count];
String params = stack.pop();
String[] paramsTable = params.split(",");
for (int j = 0; j < count; j++) {
table[j] = stack.pop();
table[j] = paramsTable[j];
}
value = executioner.executeFunction(temp, roundingMode, table);
stack.push(value.toPlainString());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* RPNCalculator - Reverse Polish Notation mathematics Library
* RPNLibrary - Reverse Polish Notation Library
* Copyright (C) 2011 Bartłomiej Góra
*
* This program is free software: you can redistribute it and/or modify
Expand All @@ -17,12 +17,12 @@
* Contact: bartlomiej.gora@gmail.com
*/

package pl.bgora.rpn;
package com.github.bgora.rpnlibrary;

import pl.bgora.rpn.advanced.functions.AbstractFunctionStrategy;
import pl.bgora.rpn.advanced.operators.AbstractOperatorStrategy;
import pl.bgora.rpn.exceptions.NoSuchFunctionFound;
import pl.bgora.rpn.exceptions.WrongArgumentException;
import com.github.bgora.rpnlibrary.advanced.functions.AbstractFunctionStrategy;
import com.github.bgora.rpnlibrary.advanced.operators.AbstractOperatorStrategy;
import com.github.bgora.rpnlibrary.exceptions.NoSuchFunctionFound;
import com.github.bgora.rpnlibrary.exceptions.WrongArgumentException;

import java.math.BigDecimal;
import java.math.RoundingMode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* RPNCalculator - Reverse Polish Notation mathematics Library
* RPNLibrary - Reverse Polish Notation Library
* Copyright (C) 2011 Bartłomiej Góra
*
* This program is free software: you can redistribute it and/or modify
Expand All @@ -17,10 +17,10 @@
* Contact: bartlomiej.gora@gmail.com
*/

package pl.bgora.rpn;
package com.github.bgora.rpnlibrary;

import pl.bgora.rpn.exceptions.NoSuchFunctionFound;
import pl.bgora.rpn.exceptions.WrongArgumentException;
import com.github.bgora.rpnlibrary.exceptions.NoSuchFunctionFound;
import com.github.bgora.rpnlibrary.exceptions.WrongArgumentException;

import java.math.BigDecimal;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* RPNCalculator - Reverse Polish Notation mathematics Library
* RPNLibrary - Reverse Polish Notation Library
* Copyright (C) 2011 Bartłomiej Góra
*
* This program is free software: you can redistribute it and/or modify
Expand All @@ -17,9 +17,9 @@
* Contact: bartlomiej.gora@gmail.com
*/

package pl.bgora.rpn;
package com.github.bgora.rpnlibrary;

import pl.bgora.rpn.factory.AbstractCalculatorFactory;
import com.github.bgora.rpnlibrary.factory.AbstractCalculatorFactory;

/**
* Creates DefaultCalculator instance
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* RPNCalculator - Reverse Polish Notation mathematics Library
* RPNLibrary - Reverse Polish Notation Library
* Copyright (C) 2011 Bartłomiej Góra
*
* This program is free software: you can redistribute it and/or modify
Expand All @@ -17,7 +17,7 @@
* Contact: bartlomiej.gora@gmail.com
*/

package pl.bgora.rpn;
package com.github.bgora.rpnlibrary;

import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -52,15 +52,15 @@ public DefaultChecker() {
}

/**
* @see pl.bgora.rpn.RPNChecking#isDigit(java.lang.String)
* @see RPNChecking#isDigit(java.lang.String)
*/
@Override
public boolean isDigit(String input) {
return Character.isDigit(input.charAt(0));
}

/**
* @see pl.bgora.rpn.RPNChecking#isLeftBracket(java.lang.String)
* @see RPNChecking#isLeftBracket(java.lang.String)
*/
@Override
public boolean isLeftBracket(String input) {
Expand All @@ -70,7 +70,7 @@ public boolean isLeftBracket(String input) {
/**
* Returns true if input = +, or -, or *, or /, or ^, false otherwise.
*
* @see pl.bgora.rpn.RPNChecking#isOperator(java.lang.String)
* @see RPNChecking#isOperator(java.lang.String)
*/
@Override
public boolean isOperator(String input) {
Expand All @@ -80,7 +80,7 @@ public boolean isOperator(String input) {
/**
* Returns true if input = )
*
* @see pl.bgora.rpn.RPNChecking#isRightBracket(java.lang.String)
* @see RPNChecking#isRightBracket(java.lang.String)
*/
@Override
public boolean isRightBracket(String input) {
Expand All @@ -90,31 +90,31 @@ public boolean isRightBracket(String input) {
/**
* Returns true, if input is "+ - * /" or bracket "()"
*
* @see pl.bgora.rpn.RPNChecking#isOperatorOrBracket(java.lang.String)
* @see RPNChecking#isOperatorOrBracket(java.lang.String)
*/
@Override
public boolean isOperatorOrBracket(String c) {
return isOperator(c) || isRightBracket(c) || isLeftBracket(c);
}

/**
* @see pl.bgora.rpn.RPNChecking#isLeftAssociativity(java.lang.String)
* @see RPNChecking#isLeftAssociativity(java.lang.String)
*/
@Override
public boolean isLeftAssociativity(String c) {
return ("*".equals(c) || "+".equals(c) || "/".equals(c) || "-".equals(c));
}

/**
* @see pl.bgora.rpn.RPNChecking#isRightAssociativity(java.lang.String)
* @see RPNChecking#isRightAssociativity(java.lang.String)
*/
@Override
public boolean isRightAssociativity(String c) {
return "^".equals(c);
}

/**
* @see pl.bgora.rpn.RPNChecking#compareOperators(java.lang.String,
* @see RPNChecking#compareOperators(java.lang.String,
* java.lang.String)
*/
@Override
Expand All @@ -129,7 +129,7 @@ public int compareOperators(String operato1, String operator2) {
*
* Recognized functions are: sin, cos, tg, ctg.
*
* @see pl.bgora.rpn.RPNChecking#isFunction(java.lang.String)
* @see RPNChecking#isFunction(java.lang.String)
*/
@Override
public boolean isFunction(String input) {
Expand Down
Loading

0 comments on commit 193b59b

Please sign in to comment.