2015-10-16 01:18:38 +03:00
|
|
|
final class InterpreterTests: XCTestCase {
|
2015-10-16 01:25:35 +03:00
|
|
|
func testRestrictsComparisons() {
|
2015-10-16 01:29:17 +03:00
|
|
|
let comparable: (Term, Term) -> Bool = { $0.extract == 0 && $1.extract == 0 }
|
|
|
|
assert(Interpreter(equal: ==, comparable: comparable, cost: const(1)).run(a, b), ==, restricted)
|
2015-10-14 23:43:08 +03:00
|
|
|
}
|
2015-10-15 00:41:51 +03:00
|
|
|
|
2015-10-15 00:44:19 +03:00
|
|
|
func testComparisonsOfDisjointlyCategorizedTermsAreRestricted() {
|
2015-10-15 00:51:31 +03:00
|
|
|
var effects = 0
|
2015-10-16 01:25:35 +03:00
|
|
|
assert(Interpreter(equal: ==, comparable: Interpreter.comparable { _ in [ effects++ ] }, cost: const(1)).run(a, b), ==, restricted)
|
2015-10-15 00:41:51 +03:00
|
|
|
}
|
2015-10-15 00:47:07 +03:00
|
|
|
|
2015-10-16 01:25:35 +03:00
|
|
|
func testUnrestrictedComparisonsComputeReplacements() {
|
|
|
|
assert(Interpreter(equal: ==, comparable: const(true), cost: const(1)).run(a, b), ==, unrestricted)
|
2015-10-15 00:47:07 +03:00
|
|
|
}
|
2015-10-15 00:51:40 +03:00
|
|
|
|
|
|
|
func testComparisonsOfUncategorizedTermsAreUnrestricted() {
|
2015-10-16 01:25:35 +03:00
|
|
|
assert(Interpreter(equal: ==, comparable: Interpreter.comparable { _ in Set<String>() }, cost: const(1)).run(a, b), ==, unrestricted)
|
2015-10-15 00:51:40 +03:00
|
|
|
}
|
2015-10-14 22:57:58 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-10-14 23:09:58 +03:00
|
|
|
private typealias Term = Cofree<String, Int>
|
|
|
|
private typealias Diff = Free<String, Patch<Term>>
|
|
|
|
|
2015-10-14 23:10:23 +03:00
|
|
|
private let a = Term(0, [ Term(1, .Leaf("a")), Term(2, .Leaf("b")), Term(3, .Leaf("c")) ])
|
|
|
|
private let b = Term(0, [ Term(1, .Leaf("c")), Term(2, .Leaf("b")), Term(3, .Leaf("a")) ])
|
2015-10-14 23:07:07 +03:00
|
|
|
|
2015-10-15 00:46:41 +03:00
|
|
|
private let restricted = Diff.Roll([
|
2015-10-15 00:39:53 +03:00
|
|
|
.Pure(.Insert(Term(1, .Leaf("c")))),
|
|
|
|
.Pure(.Delete(Term(1, .Leaf("a")))),
|
|
|
|
Diff(Term(2, .Leaf("b"))),
|
|
|
|
.Pure(.Insert(Term(3, .Leaf("a")))),
|
|
|
|
.Pure(.Delete(Term(3, .Leaf("c")))),
|
|
|
|
])
|
|
|
|
|
2015-10-15 00:46:50 +03:00
|
|
|
private let unrestricted = Diff.Roll([
|
|
|
|
.Pure(.Replace(Term(1, .Leaf("a")), Term(1, .Leaf("c")))),
|
|
|
|
Diff(Term(2, .Leaf("b"))),
|
|
|
|
.Pure(.Replace(Term(3, .Leaf("c")), Term(3, .Leaf("a")))),
|
|
|
|
])
|
|
|
|
|
2015-10-14 23:07:07 +03:00
|
|
|
|
2015-10-14 22:57:58 +03:00
|
|
|
import Assertions
|
|
|
|
@testable import Doubt
|
2015-10-14 23:43:08 +03:00
|
|
|
import Prelude
|
2015-10-14 22:57:58 +03:00
|
|
|
import XCTest
|