Add few more checks in TestIncrementalProgram tests and one test in TestStoreAwareJournal
This commit is contained in:
parent
5b500340e5
commit
8b4d98f6e2
|
|
@ -78,7 +78,7 @@ class TestIncrementalProgram {
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun addNewMatch() {
|
fun addNewMatchAtTheEnd() {
|
||||||
val progSpec = MockIncrProgSpec(
|
val progSpec = MockIncrProgSpec(
|
||||||
setOf("main", "foo.bar"),
|
setOf("main", "foo.bar"),
|
||||||
setOf(sym0("foo"))
|
setOf(sym0("foo"))
|
||||||
|
|
@ -93,6 +93,7 @@ class TestIncrementalProgram {
|
||||||
))
|
))
|
||||||
).launch("addRule", progSpec) { result ->
|
).launch("addRule", progSpec) { result ->
|
||||||
result.storeView().constraintSymbols() shouldBe setOf(sym0("foo"))
|
result.storeView().constraintSymbols() shouldBe setOf(sym0("foo"))
|
||||||
|
result.lastChunk().activated().constraintSymbols() shouldBe listOf(sym0("foo"))
|
||||||
|
|
||||||
}.also { (builder, evalRes) ->
|
}.also { (builder, evalRes) ->
|
||||||
builder.programWithRules(
|
builder.programWithRules(
|
||||||
|
|
@ -106,6 +107,7 @@ class TestIncrementalProgram {
|
||||||
)
|
)
|
||||||
).relaunch("test1", progSpec, evalRes.token()) { result ->
|
).relaunch("test1", progSpec, evalRes.token()) { result ->
|
||||||
result.storeView().constraintSymbols() shouldBe setOf(sym0("bar"))
|
result.storeView().constraintSymbols() shouldBe setOf(sym0("bar"))
|
||||||
|
result.lastChunk().activated().constraintSymbols() shouldBe listOf(sym0("bar"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -134,6 +136,7 @@ class TestIncrementalProgram {
|
||||||
)
|
)
|
||||||
).launch("addRule", progSpec) { result ->
|
).launch("addRule", progSpec) { result ->
|
||||||
result.storeView().constraintSymbols() shouldBe setOf(sym0("foo"), sym0("bar"))
|
result.storeView().constraintSymbols() shouldBe setOf(sym0("foo"), sym0("bar"))
|
||||||
|
result.lastChunk().activated().constraintSymbols() shouldBe listOf(sym0("bar"))
|
||||||
|
|
||||||
}.also { (builder, evalRes) ->
|
}.also { (builder, evalRes) ->
|
||||||
builder.programWithRules(
|
builder.programWithRules(
|
||||||
|
|
@ -147,11 +150,13 @@ class TestIncrementalProgram {
|
||||||
)
|
)
|
||||||
).relaunch("test1", progSpec, evalRes.token()) { result ->
|
).relaunch("test1", progSpec, evalRes.token()) { result ->
|
||||||
result.storeView().constraintSymbols() shouldBe setOf(sym0("foo"), sym0("bar"), sym0("baz"))
|
result.storeView().constraintSymbols() shouldBe setOf(sym0("foo"), sym0("bar"), sym0("baz"))
|
||||||
result.token().journalView.chunks.last().activated().constraintSymbols() shouldBe listOf(sym0("baz"))
|
result.lastChunk().activated().constraintSymbols() shouldBe listOf(sym0("baz"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun EvaluationResult.lastChunk() = this.token().journalView.chunks.last()
|
||||||
|
|
||||||
private fun Iterable<Occurrence>.constraintSymbols() = this.map { it.constraint.symbol() }
|
private fun Iterable<Occurrence>.constraintSymbols() = this.map { it.constraint.symbol() }
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -253,10 +258,12 @@ class TestIncrementalProgram {
|
||||||
|
|
||||||
val evalRes1 = p1.launch("initial run", progSpec) { result ->
|
val evalRes1 = p1.launch("initial run", progSpec) { result ->
|
||||||
result.storeView().constraintSymbols() shouldBe setOf(sym0("baz"), sym0("dummy"))
|
result.storeView().constraintSymbols() shouldBe setOf(sym0("baz"), sym0("dummy"))
|
||||||
|
result.lastChunk().activated().constraintSymbols() shouldBe listOf(sym0("dummy"))
|
||||||
}.second
|
}.second
|
||||||
|
|
||||||
p2.relaunch("test1", progSpec, evalRes1.token()) { result ->
|
p2.relaunch("test1", progSpec, evalRes1.token()) { result ->
|
||||||
result.storeView().constraintSymbols() shouldBe setOf(sym0("bar"), sym0("baz"), sym0("dummy"))
|
result.storeView().constraintSymbols() shouldBe setOf(sym0("bar"), sym0("baz"), sym0("dummy"))
|
||||||
|
result.lastChunk().activated().constraintSymbols() shouldBe listOf(sym0("dummy"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,8 +97,79 @@ class TestStoreAwareJournal {
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testReplayInitialChunk() {
|
fun testReplayCorners() {
|
||||||
|
val mockController = MockController()
|
||||||
|
with(programWithRules(
|
||||||
|
rule("rule1",
|
||||||
|
headKept(
|
||||||
|
princConstraint("foo")
|
||||||
|
),
|
||||||
|
body(
|
||||||
|
princConstraint("bar")
|
||||||
|
)),
|
||||||
|
rule("rule2",
|
||||||
|
headReplaced(
|
||||||
|
princConstraint("bar"),
|
||||||
|
princConstraint("foo")
|
||||||
|
),
|
||||||
|
body(
|
||||||
|
princConstraint("qux")
|
||||||
|
)),
|
||||||
|
rule("rule3",
|
||||||
|
headKept(
|
||||||
|
princConstraint("qux")
|
||||||
|
),
|
||||||
|
body(
|
||||||
|
princConstraint("lax")
|
||||||
|
))
|
||||||
|
))
|
||||||
|
{
|
||||||
|
with(JournalDispatcherHelper(Dispatcher(RuleIndex(rulesLists)))) {
|
||||||
|
|
||||||
|
val initPos = hist.currentPos()
|
||||||
|
|
||||||
|
logExpand(justifiedOccurrence("foo", setOf(1)))
|
||||||
|
|
||||||
|
logFirstMatch()
|
||||||
|
logExpandJustified("bar")
|
||||||
|
|
||||||
|
logFirstMatch()
|
||||||
|
logExpandJustified("qux")
|
||||||
|
|
||||||
|
logFirstMatch()
|
||||||
|
logExpandJustified("lax")
|
||||||
|
|
||||||
|
// 'replay' to the saved pos after full 'resetStore' must restore the store
|
||||||
|
with(hist) {
|
||||||
|
|
||||||
|
val lastPos = currentPos()
|
||||||
|
|
||||||
|
storeView().constraintSymbols() shouldBe setOf(sym0("qux"), sym0("lax"))
|
||||||
|
val nchunks = view().chunks.size
|
||||||
|
nchunks shouldBe 4
|
||||||
|
|
||||||
|
// try replay the last chunk
|
||||||
|
replay(mockController, lastPos)
|
||||||
|
|
||||||
|
// should change nothing
|
||||||
|
storeView().constraintSymbols() shouldBe setOf(sym0("qux"), sym0("lax"))
|
||||||
|
view().chunks.size shouldBe nchunks
|
||||||
|
|
||||||
|
|
||||||
|
resetStore()
|
||||||
|
|
||||||
|
// storeView is reset, but journal remains the same
|
||||||
|
storeView().allOccurrences().count() shouldBe 0
|
||||||
|
view().chunks.size shouldBe nchunks
|
||||||
|
|
||||||
|
replay(mockController, initPos)
|
||||||
|
|
||||||
|
// storeView replays only the initial chunk, journal remains the same
|
||||||
|
storeView().constraintSymbols() shouldBe setOf(sym0("foo"))
|
||||||
|
view().chunks.size shouldBe nchunks
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue