Skip to content

Commit

Permalink
Merge pull request #39 from jbee/fix-date-between
Browse files Browse the repository at this point in the history
fix: date between functions should return negative if start after end
  • Loading branch information
jbee authored Nov 30, 2023
2 parents b20f521 + 4c2819b commit f2b7ca1
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ fun interface ExpressionFunctions {
fun d2_daysBetween(start: LocalDate?, end: LocalDate?): Int {
require(start != null) { "start parameter of d2:daysBetween must not be null" }
require(end != null) { "end parameter of d2:daysBetween must not be null" }
return if (start.toEpochDays() < end.toEpochDays()) start.daysUntil(end) else end.daysUntil(start)
return start.daysUntil(end)
}

fun d2_extractDataMatrixValue(gs1Key: String?, value: String?): String? {
Expand Down Expand Up @@ -249,7 +249,7 @@ fun interface ExpressionFunctions {
fun d2_monthsBetween(start: LocalDate?, end: LocalDate?): Int {
require(start != null) { "start parameter of d2:monthsBetween must not be null" }
require(end != null) { "end parameter of d2:monthsBetween must not be null" }
return if (start.toEpochDays() < end.toEpochDays()) start.monthsUntil(end) else end.monthsUntil(start)
return start.monthsUntil(end)
}

fun d2_oizp(value: Number?): Double {
Expand Down Expand Up @@ -301,7 +301,7 @@ fun interface ExpressionFunctions {
fun d2_yearsBetween(start: LocalDate?, end: LocalDate?): Int {
require(start != null) { "start parameter of d2:yearsBetween must not be null" }
require(end != null) { "end parameter of d2:yearsBetween must not be null" }
return if (start.toEpochDays() < end.toEpochDays()) start.yearsUntil(end) else end.yearsUntil(start)
return start.yearsUntil(end)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@ internal class DaysBetweenTest {
@Test
fun testDaysBetween() {
assertEquals(6, evaluate("d2:daysBetween(\"2020-01-01\", \"2020-01-07\")"))
assertEquals(6, evaluate("d2:daysBetween(\"2020-01-07\", \"2020-01-01\")"))
assertEquals(31, evaluate("d2:daysBetween(\"2020-01-01\", \"2020-02-01\")"))
assertEquals(29, evaluate("d2:daysBetween(\"2020-02-01\", \"2020-03-01\")"))
assertEquals(366, evaluate("d2:daysBetween(\"2020-01-01\", \"2021-01-01\")"))
}

@Test
fun testDaysBetween_Negative() {
assertEquals(-6, evaluate("d2:daysBetween(\"2020-01-07\", \"2020-01-01\")"))
}

@Test
fun testDaysBetween_Null() {
val ex = assertFailsWith(IllegalArgumentException::class) { evaluate("d2:daysBetween(null, \"2021-01-01\")") }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@ internal class MinutesBetweenTest {
fun testMinutesBetween() {
val minPerDay = 60 * 24
assertEquals(6 * minPerDay, evaluate("d2:minutesBetween(\"2020-01-01\", \"2020-01-07\")"))
assertEquals(6 * minPerDay, evaluate("d2:minutesBetween(\"2020-01-07\", \"2020-01-01\")"))
assertEquals(31 * minPerDay, evaluate("d2:minutesBetween(\"2020-01-01\", \"2020-02-01\")"))
assertEquals(29 * minPerDay, evaluate("d2:minutesBetween(\"2020-02-01\", \"2020-03-01\")"))
assertEquals(366 * minPerDay, evaluate("d2:minutesBetween(\"2020-01-01\", \"2021-01-01\")"))
}

@Test
fun testMinutesBetween_Negative() {
val minPerDay = 60 * 24
assertEquals(-6 * minPerDay, evaluate("d2:minutesBetween(\"2020-01-07\", \"2020-01-01\")"))
}

@Test
fun testMinutesBetween_Null() {
val ex = assertFailsWith(IllegalArgumentException::class) { evaluate("d2:minutesBetween(null, \"2021-01-01\")") }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ internal class MonthsBetweenTest {
assertEquals(1, evaluate("d2:monthsBetween(\"2020-01-01\", \"2020-02-01\")"))
assertEquals(1, evaluate("d2:monthsBetween(\"2020-02-01\", \"2020-03-01\")"))
assertEquals(12, evaluate("d2:monthsBetween(\"2020-01-01\", \"2021-01-01\")"))
assertEquals(12, evaluate("d2:monthsBetween(\"2021-01-01\", \"2020-01-01\")"))
}

@Test
fun testMonthsBetween_Negative() {
assertEquals(-12, evaluate("d2:monthsBetween(\"2021-01-01\", \"2020-01-01\")"))
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ internal class WeeksBetweenTest {
assertEquals(4, evaluate("d2:weeksBetween(\"2020-01-01\", \"2020-02-01\")"))
assertEquals(4, evaluate("d2:weeksBetween(\"2020-02-01\", \"2020-03-01\")"))
assertEquals(52, evaluate("d2:weeksBetween(\"2020-01-01\", \"2021-01-01\")"))
assertEquals(52, evaluate("d2:weeksBetween(\"2021-01-01\", \"2020-01-01\")"))
}

@Test
fun testWeeksBetween_Negative() {
assertEquals(-52, evaluate("d2:weeksBetween(\"2021-01-01\", \"2020-01-01\")"))
}

@Test
Expand Down

0 comments on commit f2b7ca1

Please sign in to comment.