levenshtein-transformations/Tests/LevenshteinTransformationsTests.swift
2024-01-01 11:57:11 +01:00

97 lines
2.4 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 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() {
testEquatable()
testIdentifiable()
testString()
}
}
// swiftlint:enable no_magic_numbers