summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/features/PrimitiveArraySerializersTest.kt
blob: 2397c177305c8649baf1af084efa8e5142ba4a04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
 * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

package kotlinx.serialization.features

import kotlinx.serialization.*
import kotlinx.serialization.json.*
import kotlinx.serialization.test.*
import kotlin.test.*

class PrimitiveArraySerializersTest : JsonTestBase() {

    @Serializable
    data class A(
        val arr: ByteArray,
        val arr2: IntArray = intArrayOf(1, 2),
        val arr3: BooleanArray = booleanArrayOf(true, false),
        var arr4: CharArray = charArrayOf('a', 'b', 'c'),
        val arr5: DoubleArray = doubleArrayOf(Double.NaN, 0.1, -0.25),
        val arr6: ShortArray = shortArrayOf(1, 2, 3),
        val arr7: LongArray = longArrayOf(1, 2, 3),
        val arr8: FloatArray = floatArrayOf(1.25f, 2.25f, 3.25f)
    ) {
        override fun equals(other: Any?): Boolean {
            if (this === other) return true
            if (other !is A) return false

            if (!arr.contentEquals(other.arr)) return false
            if (!arr2.contentEquals(other.arr2)) return false
            if (!arr3.contentEquals(other.arr3)) return false
            if (!arr4.contentEquals(other.arr4)) return false
            if (!arr5.contentEquals(other.arr5)) return false
            if (!arr6.contentEquals(other.arr6)) return false
            if (!arr7.contentEquals(other.arr7)) return false
            if (!arr8.contentEquals(other.arr8)) return false

            return true
        }

        override fun hashCode(): Int {
            var result = arr.contentHashCode()
            result = 31 * result + arr2.contentHashCode()
            result = 31 * result + arr3.contentHashCode()
            result = 31 * result + arr4.contentHashCode()
            result = 31 * result + arr5.contentHashCode()
            result = 31 * result + arr6.contentHashCode()
            result = 31 * result + arr7.contentHashCode()
            result = 31 * result + arr8.contentHashCode()
            return result
        }

        override fun toString(): String {
            return "A(arr=${arr.contentToString()}, arr2=${arr2.contentToString()}, arr3=${arr3.contentToString()}, arr4=${arr4.contentToString()}, arr5=${arr5.contentToString()}, arr6=${arr6.contentToString()}, arr7=${arr7.contentToString()}, arr8=${arr8.contentToString()})"
        }
    }

    @Test
    fun testCanBeSerialized() = assertStringFormAndRestored(
        """{"arr":[1,2,3],"arr2":[1,2],"arr3":[true,false],"arr4":["a","b","c"],"arr5":[NaN,0.1,-0.25],"arr6":[1,2,3],"arr7":[1,2,3],"arr8":[1.25,2.25,3.25]}""",
        A(byteArrayOf(1, 2, 3)),
        A.serializer(),
        lenient
    )
}