added unit tests for equality and hashCode

master
Robinson 2023-02-23 20:14:33 +01:00
parent 687889abce
commit dcc78bba30
No known key found for this signature in database
GPG Key ID: 8E7DB78588BD6F5C
1 changed files with 90 additions and 5 deletions

View File

@ -18,6 +18,7 @@ package dorkbox.storage
import com.esotericsoftware.kryo.Kryo
import com.esotericsoftware.kryo.io.Input
import com.esotericsoftware.kryo.io.Output
import dorkbox.storage.serializer.SerializerBytes
import org.junit.Assert
import org.junit.FixMethodOrder
import org.junit.Rule
@ -67,19 +68,49 @@ class StorageTest {
Assert.assertTrue(tes == tester)
}
@Test
fun memoryEqualityAndHash() {
val tester = Tester("key1", "value1")
val s1 = Storage.Memory()
val s2 = Storage.Memory()
Assert.assertTrue(s1 == s2)
Assert.assertTrue(s1.hashCode() == s2.hashCode())
val s1Build = s1.build()
val s2Build = s2.build()
Assert.assertTrue(s1Build == s2Build)
Assert.assertTrue(s1Build.hashCode() == s2Build.hashCode())
// note: we want to auto-close the storage after we write/read it
s1Build.use {
it["key1"] = tester
}
Assert.assertFalse(s1Build == s2Build)
Assert.assertFalse(s1Build.hashCode() == s2Build.hashCode())
}
@Test
fun property() {
val tmp = tmp().newFile()
val tester = Tester("key1", "value1")
// lambda's do NOT evaluate equality. Only reference equality.
val serializer = SerializerBytes {
register(Tester::class.java, TesterSerializer())
}
// note: we want to auto-close the storage after we write/read it
val storage = Storage.Property().file(tmp).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
val storage = Storage.Property().file(tmp).serializer(serializer).build()
storage.use {
it["key1"] = tester
}
val storage2 = Storage.Property().file(tmp).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
val storage2 = Storage.Property().file(tmp).serializer(serializer).build()
val tes: Tester? = storage2.use {
it["key1"]
@ -95,13 +126,18 @@ class StorageTest {
val tester = Tester("key1", "value1")
// lambda's do NOT evaluate equality. Only reference equality.
val serializer = SerializerBytes {
register(Tester::class.java, TesterSerializer())
}
// note: we want to auto-close the storage after we write/read it
val storage1 = Storage.Property().file(tmp1).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
val storage1 = Storage.Property().file(tmp1).serializer(serializer).build()
storage1.use {
it["key1"] = tester
}
val storage2 = Storage.Property().file(tmp2).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
val storage2 = Storage.Property().file(tmp2).serializer(serializer).build()
storage2.use {
it["key1"] = tester
}
@ -111,7 +147,7 @@ class StorageTest {
val lines1 = tmp1.readLines().filter { !it.startsWith("#") || it.startsWith("#Storage") }
val lines2 = tmp1.readLines().filter { !it.startsWith("#") || it.startsWith("#Storage") }
Assert.assertTrue( lines1 == lines2)
Assert.assertTrue(lines1 == lines2)
}
@Test
@ -140,6 +176,55 @@ class StorageTest {
}
}
@Test
fun propertyEqualityAndHash() {
val tmp1 = tmp().newFile()
val tmp2 = tmp().newFile()
val tester = Tester("key1", "value1")
// lambda's do NOT evaluate equality. Only reference equality.
val serializer = SerializerBytes {
register(Tester::class.java, TesterSerializer())
}
val s1 = Storage.Property().file(tmp1).serializer(serializer)
val s2 = Storage.Property().file(tmp1).serializer(serializer)
val s3 = Storage.Property().file(tmp2).serializer(serializer)
val s4 = Storage.Property().file(tmp2).serializer(SerializerBytes {
register(Tester::class.java, TesterSerializer())
})
Assert.assertTrue(s1 == s2)
Assert.assertFalse(s1 == s3)
Assert.assertFalse(s3 == s4)
Assert.assertTrue(s1.hashCode() == s2.hashCode())
Assert.assertFalse(s1.hashCode() == s3.hashCode())
Assert.assertFalse(s3.hashCode() == s4.hashCode())
val s1Build = s1.build()
val s2Build = s2.build()
val s3Build = s3.build()
val s4Build = s4.build()
Assert.assertTrue(s1Build == s2Build)
Assert.assertFalse(s1Build == s3Build)
Assert.assertFalse(s3Build == s4Build)
Assert.assertTrue(s1Build.hashCode() == s2Build.hashCode())
Assert.assertFalse(s1Build.hashCode() == s3Build.hashCode())
Assert.assertFalse(s3Build.hashCode() == s4Build.hashCode())
// note: we want to auto-close the storage after we write/read it
s1Build.use {
it["key1"] = tester
}
Assert.assertFalse(s1Build == s2Build)
Assert.assertFalse(s1Build.hashCode() == s2Build.hashCode())
}
// @Test
// fun json() {
// val tmp = tmp().newFile()