Skip to content

Commit

Permalink
Add minus operator function
Browse files Browse the repository at this point in the history
  • Loading branch information
bsg62 committed Feb 12, 2023
1 parent 3129882 commit f298946
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 19 deletions.
1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 22 additions & 10 deletions src/main/kotlin/io/webcodr/sweetdate/extension/LocalDate.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
package io.webcodr.sweetdate.extension

import io.webcodr.sweetdate.unit.Days
import io.webcodr.sweetdate.unit.Months
import io.webcodr.sweetdate.unit.Unit
import io.webcodr.sweetdate.unit.Weeks
import io.webcodr.sweetdate.unit.Years
import java.time.LocalDate

operator fun LocalDate.plus(unit: Unit): LocalDate {
return when(unit) {
is Days -> this.plusDays(unit.days)
is Weeks -> this.plusWeeks(unit.weeks)
is Months -> this.plusMonths(unit.months)
is Years -> this.plusYears(unit.years)
enum class Sign {
PLUS, MINUS
}

fun add(
date: LocalDate,
unit: Unit,
sign: Sign
): LocalDate {
val value = when(sign) {
Sign.PLUS -> unit.value
Sign.MINUS -> -unit.value
}

return date.plus(value, unit.chronoUnit)
}

operator fun LocalDate.plus(unit: Unit): LocalDate {
return add(this, unit, Sign.PLUS)
}

operator fun LocalDate.minus(unit: Unit): LocalDate {
return add(this, unit, Sign.MINUS)
}
22 changes: 17 additions & 5 deletions src/main/kotlin/io/webcodr/sweetdate/unit/Unit.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
package io.webcodr.sweetdate.unit

sealed class Unit
import java.time.temporal.ChronoUnit

class Days(val days: Long): Unit()
class Weeks(val weeks: Long): Unit()
class Months(val months: Long): Unit()
class Years(val years: Long): Unit()
sealed class Unit(val value: Long) {
abstract val chronoUnit: ChronoUnit
}

class Days(value: Long): Unit(value) {
override val chronoUnit = ChronoUnit.DAYS
}
class Weeks(value: Long): Unit(value) {
override val chronoUnit = ChronoUnit.WEEKS
}
class Months(value: Long): Unit(value) {
override val chronoUnit = ChronoUnit.MONTHS
}
class Years(value: Long): Unit(value) {
override val chronoUnit = ChronoUnit.YEARS
}
34 changes: 30 additions & 4 deletions src/test/kotlin/io/webcodr/sweetdate/extension/LocalDateTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,61 @@ import org.junit.jupiter.api.Assertions.*
import java.time.LocalDate

internal class LocalDateTest {
private val baseDate = LocalDate.now()

@Test
fun testPlusDays() {
val baseDate = LocalDate.now()
val result = baseDate + Days(10)

assertEquals(baseDate.plusDays(10), result)
}

@Test
fun testPlusWeeks() {
val baseDate = LocalDate.now()
val result = baseDate + Weeks(10)

assertEquals(baseDate.plusWeeks(10), result)
}

@Test
fun testPlusMonths() {
val baseDate = LocalDate.now()
val result = baseDate + Months(10)

assertEquals(baseDate.plusMonths(10), result)
}

@Test
fun testPlusYears() {
val baseDate = LocalDate.now()
val result = baseDate + Years(10)

assertEquals(baseDate.plusYears(10), result)
}

@Test
fun testMinusDays() {
val result = baseDate - Days(10)

assertEquals(baseDate.minusDays(10), result)
}

@Test
fun testMinusWeeks() {
val result = baseDate - Weeks(10)

assertEquals(baseDate.minusWeeks(10), result)
}

@Test
fun testMinusMonths() {
val result = baseDate - Months(10)

assertEquals(baseDate.minusMonths(10), result)
}

@Test
fun testMinusYears() {
val result = baseDate - Years(10)

assertEquals(baseDate.minusYears(10), result)
}
}

0 comments on commit f298946

Please sign in to comment.