@@ -8,10 +8,13 @@ import org.modelix.model.api.PBranch
8
8
import org.modelix.model.api.getRootNode
9
9
import org.modelix.model.client.IdGenerator
10
10
import org.modelix.model.data.ModelData
11
+ import org.modelix.model.data.NodeData
11
12
import org.modelix.model.lazy.CLTree
12
13
import org.modelix.model.lazy.ObjectStoreCache
13
14
import org.modelix.model.persistent.MapBaseStore
15
+ import org.modelix.model.test.RandomModelChangeGenerator
14
16
import java.io.File
17
+ import kotlin.random.Random
15
18
import kotlin.test.assertEquals
16
19
import kotlin.test.fail
17
20
@@ -81,7 +84,7 @@ class ModelImporterTest {
81
84
@Test
82
85
fun `model conforms to spec` () {
83
86
branch.runRead {
84
- assertAllNodeConformToSpec (newModel.root, branch.getRootNode())
87
+ assertAllNodesConformToSpec (newModel.root, branch.getRootNode())
85
88
}
86
89
}
87
90
@@ -122,4 +125,43 @@ class ModelImporterTest {
122
125
}
123
126
}
124
127
}
128
+
129
+ @Test
130
+ fun `can handle random changes` () {
131
+ val tree0 = CLTree (ObjectStoreCache (MapBaseStore ()))
132
+ val branch0 = PBranch (tree0, IdGenerator .getInstance(1 ))
133
+
134
+ val seed = Random .nextInt()
135
+ println (" Seed for random change test: $seed " )
136
+ lateinit var initialState: NodeData
137
+ lateinit var specification: NodeData
138
+ val numChanges = 50
139
+
140
+ branch0.runWrite {
141
+ val rootNode = branch0.getRootNode()
142
+ val grower = RandomModelChangeGenerator (rootNode, Random (seed)).growingOperationsOnly()
143
+ for (i in 1 .. 50 ) {
144
+ grower.applyRandomChange()
145
+ }
146
+ initialState = rootNode.asExported()
147
+
148
+ val changer = RandomModelChangeGenerator (rootNode, Random (seed))
149
+ for (i in 1 .. numChanges) {
150
+ changer.applyRandomChange()
151
+ }
152
+ specification = rootNode.asExported()
153
+ }
154
+
155
+ val tree1 = CLTree (ObjectStoreCache (MapBaseStore ()))
156
+ val branch1 = PBranch (tree1, IdGenerator .getInstance(1 ))
157
+
158
+ branch1.runWrite {
159
+ val importer = ModelImporter (branch1.getRootNode(), ImportStats ())
160
+ importer.import(ModelData (root = initialState))
161
+ importer.import(ModelData (root = specification))
162
+
163
+ assertAllNodesConformToSpec(specification, branch1.getRootNode())
164
+ assert (importer.stats!! .getTotal() <= numChanges)
165
+ }
166
+ }
125
167
}
0 commit comments