1
+ /*
2
+ * Copyright 2019-2020 JetBrains s.r.o.
3
+ * Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4
+ */
5
+
6
+ package kotlinx.datetime.test
7
+
8
+ import kotlinx.datetime.*
9
+ import kotlin.test.*
10
+
11
+ class DateTimeUnitTest {
12
+ val U = DateTimeUnit // alias
13
+
14
+ @Test
15
+ fun baseUnits () {
16
+ val baseUnitProps = listOf (
17
+ U ::NANOSECOND , U ::MICROSECOND , U ::MILLISECOND , U ::SECOND , U ::MINUTE , U ::HOUR ,
18
+ U ::DAY , U ::WEEK , U ::MONTH , U ::QUARTER , U ::YEAR , U ::CENTURY
19
+ )
20
+ for (unit in baseUnitProps) {
21
+ assertEquals(unit.name, unit.get().toString())
22
+ }
23
+
24
+ val allUnits = baseUnitProps.map { it.get() }
25
+
26
+ assertEquals(allUnits.size, allUnits.map { it.hashCode() }.distinct().size)
27
+
28
+ for (unit in allUnits) {
29
+ assertSame(unit, allUnits.singleOrNull { it == unit }) // should be no not same, but equal
30
+ }
31
+ }
32
+
33
+ @Test
34
+ fun productUnits () {
35
+ ensureEquality(U .MICROSECOND , U .NANOSECOND * 1000 , " MICROSECOND" )
36
+ ensureEquality(U .MICROSECOND * 2000 , U .NANOSECOND * 2000_000 , " 2-MILLISECOND" )
37
+
38
+ val twoDays = U .DAY * 2
39
+ assertEquals(" 2-DAY" , twoDays.toString())
40
+
41
+ val twoWeeks = U .WEEK * 2
42
+ assertEquals(" 2-WEEK" , twoWeeks.toString())
43
+ assertNotEquals(twoDays, twoWeeks)
44
+
45
+ val fortnight = U .DAY * 14
46
+ ensureEquality(twoWeeks, fortnight, " 2-WEEK" )
47
+
48
+ val fourQuarters = U .QUARTER * 4
49
+ ensureEquality(U .YEAR , fourQuarters, " YEAR" )
50
+
51
+ val twoFourMonths = U .MONTH * 24
52
+ val twoYears = U .YEAR * 2
53
+ ensureEquality(twoYears, twoFourMonths, " 2-YEAR" )
54
+ }
55
+
56
+ private fun ensureEquality (v1 : Any , v2 : Any , expectToString : String ) {
57
+ assertEquals(v1, v2)
58
+ assertEquals(v1.hashCode(), v2.hashCode())
59
+ assertEquals(v1.toString(), v2.toString())
60
+ assertEquals(expectToString, v2.toString())
61
+ }
62
+
63
+ }
0 commit comments