levenshtein-transformations/Tests/LevenshteinTransformationsTests.swift
david-swift b299034a4e
All checks were successful
SwiftLint / SwiftLint (push) Successful in 7s
Deploy Docs / publish (push) Successful in 1m6s
Add support for keypaths
2026-02-04 14:55:09 +01:00

122 lines
3.1 KiB
Swift

//
// LevenshteinTransformationsTests.swift
// LevenshteinTransformations
//
// Created by david-swift on 01.01.24.
//
// swiftlint:disable no_magic_numbers
import LevenshteinTransformations
/// Tests for the LevenshteinTransformations library.
@main
enum LevenshteinTransformationsTests {
/// An example type conforming to `Identifiable`.
struct TestType: Identifiable, Equatable {
/// The identifier.
var id: Int
}
/// Test the transform function with a custom path.
static func testCustom() {
let source = [1, 2, 5, 6].map { TestType(id: $0) }
let target = [0, 1, 5, 6, 10].map { TestType(id: $0) }
var modified = source
source.transform(
to: target,
id: \.id,
functions: .init { index, element in
modified[index] = element
} delete: { index in
modified.remove(at: index)
} insert: { index, element in
modified.insert(element, at: index)
}
)
print(source.getRawTransformations(to: target, id: \.id))
print(modified == target)
}
/// Test the `transform` function on an equatable array.
static func testEquatable() {
let source = [1, 2, 5, 6]
let target = [0, 1, 5, 6, 10]
var modified = source
source.transform(
to: target,
functions: .init { index, element in
modified[index] = element
} delete: { index in
modified.remove(at: index)
} insert: { index, element in
modified.insert(element, at: index)
}
)
print(modified == target)
}
/// Test the `transform` function on an identifiable array.
static func testIdentifiable() {
let source = [1, 2, 5, 6].map { TestType(id: $0) }
let target = [0, 1, 5, 6, 10].map { TestType(id: $0) }
var modified = source
source.identifiableTransform(
to: target,
functions: .init { index, element in
modified[index] = element
} delete: { index in
modified.remove(at: index)
} insert: { index, element in
modified.insert(element, at: index)
}
)
print(modified == target)
}
/// Test the `transform` function on a string.
static func testString() {
let source = "Hello World"
let target = "Servus Welt"
var modified = Array(source)
source.transform(
to: target,
functions: .init { index, element in
modified[index] = element
} delete: { index in
modified.remove(at: index)
} insert: { index, element in
modified.insert(element, at: index)
}
)
print(String(modified) == target)
}
/// Run the tests.
static func main() {
testCustom()
testEquatable()
testIdentifiable()
testString()
}
}
// swiftlint:enable no_magic_numbers