1
1
mirror of https://github.com/github/semantic.git synced 2024-12-01 17:59:10 +03:00
semantic/prototype/DoubtTests/DiffTests.swift
2015-10-06 13:16:32 -04:00

52 lines
1.7 KiB
Swift

final class DiffTests: XCTestCase {
func testSESOverEmptyCollectionsIsEmpty() {
XCTAssertEqual(Diff.diff([], []), [])
}
func testSESOverEmptyAndNonEmptyCollectionsIsInsertions() {
XCTAssertEqual(Diff.diff([], [ a, b ]), [ Diff.Patch(nil, a), Diff.Patch(nil, b) ])
}
func testSESOverNonEmptyAndEmptyCollectionsIsDeletions() {
XCTAssertEqual(Diff.diff([ a, b ], []), [ Diff.Patch(a, nil), Diff.Patch(b, nil) ])
}
func testSESCanInsertAtHead() {
XCTAssertEqual(Diff.diff([ a, b, c ], [ d, a, b, c ]), [ Diff.Insert(d), Diff(a), Diff(b), Diff(c) ])
}
func testSESCanDeleteAtHead() {
XCTAssertEqual(Diff.diff([ d, a, b, c ], [ a, b, c ]), [ Diff.Delete(d), Diff(a), Diff(b), Diff(c) ])
}
func testSESCanInsertInMiddle() {
XCTAssertEqual(Diff.diff([ a, b, c ], [ a, d, b, c ]), [ Diff(a), Diff.Insert(d), Diff(b), Diff(c) ])
}
func testSESCanDeleteInMiddle() {
XCTAssertEqual(Diff.diff([ a, d, b, c ], [ a, b, c ]), [ Diff(a), Diff.Delete(d), Diff(b), Diff(c) ])
}
func testSESOfLongerSequences() {
// fixme: this is awfully slow for such a short sequence
XCTAssertEqual(Diff.diff([ a, b, c, a, b, b, a ], [ c, b, a, b, a, c ]), [ Diff.Patch(a, c), Diff(b), Diff.Delete(c), Diff(a), Diff.Delete(b), Diff(b), Diff(a), Diff.Insert(c) ])
}
}
private typealias Term = Fix<Info>
private typealias Diff = Free<Info, Patch<Info>>
private let a = Term.In(.Leaf(.Literal("a", [])))
private let b = Term.In(.Leaf(.Literal("b", [])))
private let c = Term.In(.Leaf(.Literal("c", [])))
private let d = Term.In(.Leaf(.Literal("d", [])))
private func SES(a: [Term], _ b: [Term]) -> [Diff] {
return SES(a, b, equals: ==, recur: { Diff.Pure(Patch.Replace($0, $1)) })
}
import Assertions
@testable import Doubt
import XCTest