1
1
import org.modelix.model.lazy.AccessTrackingStore
2
2
import org.modelix.model.lazy.NonCachingObjectStore
3
+ import org.modelix.model.lazy.ObjectStoreCache
3
4
import org.modelix.model.lazy.PrefetchCache
4
5
import org.modelix.model.lazy.WrittenEntry
5
6
import org.modelix.model.persistent.CPNode
@@ -11,24 +12,39 @@ import kotlin.test.assertTrue
11
12
class PrefetchCacheTest {
12
13
13
14
private val keyValueStore = MapBasedStore ()
14
- private val accessTrackingKeyValueStore = AccessTrackingStore (keyValueStore)
15
- private val deserializingKeyValueStore = NonCachingObjectStore (accessTrackingKeyValueStore)
16
- private val prefetchCache = PrefetchCache (deserializingKeyValueStore)
17
15
18
16
@Test
19
- fun entriesAreCachedAfterGettingMultipleEntriesAsIterable () {
17
+ fun nullValueIsNotCached () {
18
+ val deserializingKeyValueStore = NonCachingObjectStore (keyValueStore)
19
+ val prefetchCache = PrefetchCache (deserializingKeyValueStore)
20
+ prefetchCache[" key" , { value -> value }]
21
+ keyValueStore.put(" key" , " value" )
22
+
23
+ val result = prefetchCache[" key" , { value -> value }]
24
+
25
+ assertEquals(" value" , result)
26
+ }
27
+
28
+ @Test
29
+ fun valuesAreCachedWhenGettingMultipleEntriesAsIterable () {
30
+ val accessTrackingKeyValueStore = AccessTrackingStore (keyValueStore)
31
+ val deserializingKeyValueStore = NonCachingObjectStore (accessTrackingKeyValueStore)
32
+ val prefetchCache = PrefetchCache (deserializingKeyValueStore)
20
33
keyValueStore.put(" key" , " value" )
21
34
prefetchCache.getAll(listOf (" key" )) { _, value -> value }
22
35
accessTrackingKeyValueStore.accessedEntries.clear()
23
36
24
37
val result = prefetchCache.getAll(listOf (" key" )) { _, value -> value }
25
38
26
- assertEquals(result, listOf (" value" ))
39
+ assertEquals(listOf (" value" ), result )
27
40
assertTrue(accessTrackingKeyValueStore.accessedEntries.isEmpty())
28
41
}
29
42
30
43
@Test
31
- fun entriesAreCachedAfterGettingMultipleEntriesAsMap () {
44
+ fun valuesAreCachedWhenGettingMultipleEntriesAsMap () {
45
+ val accessTrackingKeyValueStore = AccessTrackingStore (keyValueStore)
46
+ val deserializingKeyValueStore = NonCachingObjectStore (accessTrackingKeyValueStore)
47
+ val prefetchCache = PrefetchCache (deserializingKeyValueStore)
32
48
val regularKey = " regularKey"
33
49
val prefetchKey = " prefetchKey"
34
50
val nodeForRegularKey = CPNode .create(
@@ -47,7 +63,31 @@ class PrefetchCacheTest {
47
63
48
64
val result = prefetchCache.getAll(listOf (regularKeyReference), listOf (prefetchKeyReference))
49
65
50
- assertEquals(result, mapOf (regularKey to nodeForRegularKey, prefetchKey to nodeForPrefetchKey))
66
+ assertEquals(mapOf (regularKey to nodeForRegularKey, prefetchKey to nodeForPrefetchKey), result )
51
67
assertTrue(accessTrackingKeyValueStore.accessedEntries.isEmpty())
52
68
}
69
+
70
+ @Test
71
+ fun nullValuesAreNotCachedWhenGettingMultipleEntriesAsMap () {
72
+ val deserializingKeyValueStore = ObjectStoreCache (keyValueStore)
73
+ val prefetchCache = PrefetchCache (deserializingKeyValueStore)
74
+ val regularKey = " regularKey"
75
+ val prefetchKey = " prefetchKey"
76
+ val nodeForRegularKey = CPNode .create(
77
+ 2 , null , 1 , null , LongArray (0 ),
78
+ emptyArray(), emptyArray(), emptyArray(), emptyArray(),
79
+ )
80
+ val nodeForPrefetchKey = CPNode .create(
81
+ 3 , null , 1 , null , LongArray (0 ),
82
+ emptyArray(), emptyArray(), emptyArray(), emptyArray(),
83
+ )
84
+ val regularKeyReference = WrittenEntry (regularKey) { nodeForRegularKey }
85
+ val prefetchKeyReference = WrittenEntry (prefetchKey) { nodeForPrefetchKey }
86
+ prefetchCache.getAll(listOf (regularKeyReference), listOf (prefetchKeyReference))
87
+ keyValueStore.putAll(mapOf (regularKey to nodeForRegularKey.serialize(), prefetchKey to nodeForPrefetchKey.serialize()))
88
+
89
+ val result = prefetchCache.getAll(listOf (regularKeyReference), listOf (prefetchKeyReference))
90
+
91
+ assertEquals(mapOf (regularKey to nodeForRegularKey, prefetchKey to nodeForPrefetchKey), result)
92
+ }
53
93
}
0 commit comments