From 231212ad2a09294f192f41893bf576006adc9bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Sch=C3=BCrg?= Date: Sun, 5 Nov 2017 18:19:18 +0100 Subject: [PATCH] added min(), max(), average() and median() to MoneyList --- build.gradle | 2 +- .../de/tobiasschuerg/money/CurrencyCode.kt | 3 +- .../java/de/tobiasschuerg/money/MoneyList.kt | 23 ++++++++++ .../money/MoneyArithmeticsTest.kt | 2 - .../de/tobiasschuerg/money/MoneyListTest.kt | 43 +++++++++++++++++++ 5 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 money/src/test/java/de/tobiasschuerg/money/MoneyListTest.kt diff --git a/build.gradle b/build.gradle index c2deff9..c4db91c 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-rc1' + classpath 'com.android.tools.build:gradle:3.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' diff --git a/money/src/main/java/de/tobiasschuerg/money/CurrencyCode.kt b/money/src/main/java/de/tobiasschuerg/money/CurrencyCode.kt index 51815c9..5dc21b1 100644 --- a/money/src/main/java/de/tobiasschuerg/money/CurrencyCode.kt +++ b/money/src/main/java/de/tobiasschuerg/money/CurrencyCode.kt @@ -1,6 +1,5 @@ package de.tobiasschuerg.money -import android.util.Log import java.util.* @@ -16,7 +15,7 @@ data class CurrencyCode(val code: String) { try { symbol = java.util.Currency.getInstance(code).symbol } catch (ia: IllegalArgumentException) { - Log.w("Currency Code", "Could not find symbol for $code") + // Log.w("Currency Code", "Could not find symbol for $code") symbol = code } return symbol diff --git a/money/src/main/java/de/tobiasschuerg/money/MoneyList.kt b/money/src/main/java/de/tobiasschuerg/money/MoneyList.kt index 982489c..d572bf7 100644 --- a/money/src/main/java/de/tobiasschuerg/money/MoneyList.kt +++ b/money/src/main/java/de/tobiasschuerg/money/MoneyList.kt @@ -1,5 +1,7 @@ package de.tobiasschuerg.money +import java.math.BigDecimal + /** * List of money which provides additional features such as sum, average, median etc... * @@ -104,4 +106,25 @@ class MoneyList(private val currency: Currency, val autoConvert: Boolean = false } fun sum(): Money = sum + + fun min(): Money? = list.minBy(Money::amount) + + fun max(): Money? = list.maxBy(Money::amount) + + fun median(): Money? { + if (list.isNotEmpty()) { + val index: Int = list.size / 2 + return list.sortedBy(Money::amount)[index] + } else { + return null + } + } + + fun average(): Money? { + return if (list.isNotEmpty()) { + sum / BigDecimal(list.size) + } else { + null + } + } } \ No newline at end of file diff --git a/money/src/test/java/de/tobiasschuerg/money/MoneyArithmeticsTest.kt b/money/src/test/java/de/tobiasschuerg/money/MoneyArithmeticsTest.kt index e6b2f02..567f891 100644 --- a/money/src/test/java/de/tobiasschuerg/money/MoneyArithmeticsTest.kt +++ b/money/src/test/java/de/tobiasschuerg/money/MoneyArithmeticsTest.kt @@ -72,7 +72,5 @@ class MoneyArithmeticsTest { val result1Minus = Money(amount1 - amount2, EURO) val result2Minus = money1 - money2 Assert.assertEquals(result2Minus, result1Minus) - - } } \ No newline at end of file diff --git a/money/src/test/java/de/tobiasschuerg/money/MoneyListTest.kt b/money/src/test/java/de/tobiasschuerg/money/MoneyListTest.kt new file mode 100644 index 0000000..48b919b --- /dev/null +++ b/money/src/test/java/de/tobiasschuerg/money/MoneyListTest.kt @@ -0,0 +1,43 @@ +package de.tobiasschuerg.money + +import org.junit.Assert +import org.junit.Test + +/** + * Created by Tobias Schürg on 05.11.2017. + */ +class MoneyListTest { + + private val currency = Currency("TST", "TEST", 1.0) + private val list = MoneyList(currency) + + init { + list.add(Money(3, currency)) + list.add(Money(2, currency)) + list.add(Money(6, currency)) + list.add(Money(1, currency)) // min + list.add(Money(4, currency)) + list.add(Money(9, currency)) // max + list.add(Money(7, currency)) + list.add(Money(5, currency)) + list.add(Money(8, currency)) + } + + @Test + fun minMax() { + Assert.assertEquals(Money(1, currency), list.min()) + Assert.assertEquals(Money(9, currency), list.max()) + Assert.assertEquals(Money(5, currency), list.average()) + Assert.assertEquals(Money(5, currency), list.median()) + } + + @Test + fun minMaxEmptyList() { + val emptyList = MoneyList(currency) + Assert.assertNull(emptyList.min()) + Assert.assertNull(emptyList.max()) + Assert.assertNull(emptyList.average()) + Assert.assertNull(emptyList.median()) + } + +} \ No newline at end of file