/*
* Copyright (c) 2014. ThanksMister LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.thanksmister.btcblue.utils;
import junit.framework.TestCase;
public class CalculationsTest extends TestCase
{
public void setUp() throws Exception
{
super.setUp();
}
public void tearDown() throws Exception
{
}
public void testCalculateTotalSalesSalePriceSame() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(6709.65, 0, 0, 1, 6709.65, 474.18);
String expectedArsSale = "6709.65";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "0.00";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "1";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "474.18";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "0.00";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceLess() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(6500, 0, 0, 1, 6709.65, 474.18);
String expectedArsSale = "6500.00";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "209.65";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.96875";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.03125";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "459.36";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "14.82";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceGreater() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(7000, 0, 0, 1, 6709.65, 474.18);
String expectedArsSale = "7000.00";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "290.35";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "1.04327";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.04327";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "494.70";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "20.52";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateSales() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateSale(7000, 1, 8000, 500);
// #1 (7000)
String expectedArsSale = "7000.00";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
// #2 8000 - #1 (8000 - 7000)
String expectedDiffArs = "1000.00";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
// #3 #1/8000 (7000/8000)
String expectedBtcSale = "0.875";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
// #4 1 - #3 (.875)
String expectedDiffBtc = "0.125";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
// #5 500 * #3 (0.875)
String expectedUsdSale = "437.50";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
// #6 500 - #5 (500 - 437.5)
String expectedDiffUsd = "62.50";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateSalesBitcoinGreater() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateSale(21000, 3, 24000, 1500);
// #1 (21000)
String expectedArsSale = "21000.00";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
// #2 24000 - #1 (24000- 21000)
String expectedDiffArs = "3000.00";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
// #3 #1/24000 (21000/24000) * 3
String expectedBtcSale = "2.625";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
// #4 1 - #3 (2.625)
String expectedDiffBtc = "0.375";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
// #5 1500/3 * #3 (1500/3 * 2.625)
String expectedUsdSale = "1312.50";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
// #6 1500 - #5 (1500 - 1312.50)
String expectedDiffUsd = "187.50";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceAndFeesLess() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(6500, 0, .0001, 1, 7000, 500);
String expectedArsSale = "6499.30"; //6500 - .70
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "500.70"; // 500 + .70
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.92847"; // 0.92857 - .0001
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.07153"; // 0.07143 + .0001
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "464.24"; // 464.28 - .05
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "35.76"; // 35.72 + .05
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceAndFeesGreater() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(7500, 0, .0001, 1, 7000, 500);
String expectedArsSale = "7499.30"; // 7500 - .70
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "499.30"; // 500.00 - 70
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "1.07133"; // 1.07143 - .0001
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.07133"; // 0.07143 - .0001
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "535.66"; // 535.72 - .05
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "35.66"; // 35.72 - .05
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceAndCommissionLess() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(6500, 1, 0, 1, 7000, 500);
String expectedArsSale = "6430.00"; //6500 - 70
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "570.00"; // 500 + 70
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.91857"; // 0.92857 - .01
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.08143"; // 0.07143 + .01
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "459.28"; // 464.28 - 5.00
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "40.72"; // 35.72 + 5.00
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceAndCommissionGreater() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(7500, 1, 0, 1, 7000, 500);
String expectedArsSale = "7430.00"; // 7500 - 70
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "430.00"; // 500.00 - 70
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "1.06143"; // 1.07143 - .01
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.06143"; // 0.07143 - .01
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "530.72"; // 535.72 - 5.00
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "30.72"; // 35.72 - 5.00
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceAndCommissionAndFeesLess() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(6500, 1, .0001, 1, 7000, 500);
String expectedArsSale = "6429.30"; //6500 - 70 - .70
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "570.70"; // 500 + 70 + .70
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.91847"; // 0.92857 - .01 - .0001
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.08153"; // 0.07143 + .01 + .0001
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "459.24"; // 464.28 - 5.00 - .05
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "40.76"; // 35.72 + 5.00 + .05
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesSalePriceAndCommissionAndFeesGreater() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateTotalSales(7500, 1, .0001, 1, 7000, 500);
String expectedArsSale = "7429.30"; // 7500 - 70 - .70
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "429.30"; // 500.00 - 70 - .70
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "1.06133"; // 1.07143 - .01 - .0001
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.06133"; // 0.07143 - .01 - .0001
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "530.66"; // 535.72 - 5.00 - .05
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "30.66"; // 35.72 - 5.00 - .05
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesCommission() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateCommission(1, 1, 7000, 500);
String expectedArsSale = "6930.00";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "70.00";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.99";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.01";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "495.00";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "5.00";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateTotalSalesFees() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateFees(.0001, 1, 7000, 500);
String expectedArsSale = "6999.30";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "0.70";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.9999";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.0001";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "499.95";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "0.05";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateSaleARS() throws Exception
{
double salesARS = Calculations.calculateSaleARS(0, 1);
assertEquals(0.0, salesARS);
}
public void testCalculateUSDValue() throws Exception
{
double saleUSD = Calculations.calculateUSDValue(500, 1);
assertEquals(500.0, saleUSD);
}
public void testCalculateSale() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateSale(6500, 1, 6705.47, 473.89);
String expectedArsSale = "6500.00";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "205.47";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.96936";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.03064";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "459.37";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "14.52";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateCommission() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateCommission(1, 1, 6705.47, 473.88);
String expectedArsSale = "6638.42";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "67.05";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.99";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.01";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "469.14";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "4.74";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateFees() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateFees(.0001, 1, 8000, 500);
String expectedArsSale = "7999.20";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "0.80";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "0.9999";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.0001";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "499.95";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "0.05";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateFeesIncreaseBitcoin() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateFees(.0001, 3, 24000, 1500);
// #1 3 - .0001 * 240000/3 (8000)
String expectedArsSale = "23999.20";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
// #2 24000 - #1 (24000 - 23999.20
String expectedDiffArs = "0.80";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "2.9999";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.0001";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "1499.95";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "0.05";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
public void testCalculateFeesIncreaseFees() throws Exception
{
Calculations.CalculatedValue calculatedValue = Calculations.calculateFees(.0003, 3, 24000, 1500);
String expectedArsSale = "23997.60";
assertEquals(expectedArsSale, Conversions.formatCurrencyAmount(calculatedValue.arsSale));
String expectedDiffArs = "2.40";
assertEquals(expectedDiffArs, Conversions.formatCurrencyAmount(calculatedValue.diffARS));
String expectedBtcSale = "2.9997";
assertEquals(expectedBtcSale, Conversions.formatBitcoinAmount(calculatedValue.btcSale));
String expectedDiffBtc = "0.0003";
assertEquals(expectedDiffBtc, Conversions.formatBitcoinAmount(calculatedValue.diffBTC));
String expectedUsdSale = "1499.85";
assertEquals(expectedUsdSale, Conversions.formatCurrencyAmount(calculatedValue.usdSale));
String expectedDiffUsd = "0.15";
assertEquals(expectedDiffUsd, Conversions.formatCurrencyAmount(calculatedValue.diffUSD));
}
}