mirror of
https://github.com/pointfreeco/swift-composable-architecture.git
synced 2025-12-20 09:11:33 +01:00
153 lines
3.5 KiB
Swift
153 lines
3.5 KiB
Swift
import XCTest
|
|
|
|
@testable import ComposableArchitecture
|
|
|
|
final class IdentifiedArrayTests: XCTestCase {
|
|
func testIdSubscript() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
let array: IdentifiedArray = [User(id: 1, name: "Blob")]
|
|
|
|
XCTAssertEqual(array[id: 1], .some(User(id: 1, name: "Blob")))
|
|
}
|
|
|
|
func testRemoveId() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [User(id: 1, name: "Blob")]
|
|
|
|
XCTAssertEqual(array.remove(id: 1), User(id: 1, name: "Blob"))
|
|
XCTAssertEqual(array, [])
|
|
}
|
|
|
|
func testInsert() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [User(id: 1, name: "Blob")]
|
|
|
|
array.insert(User(id: 2, name: "Blob Jr."), at: 0)
|
|
XCTAssertEqual(array, [User(id: 2, name: "Blob Jr."), User(id: 1, name: "Blob")])
|
|
}
|
|
|
|
func testInsertContentsOf() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [User(id: 1, name: "Blob")]
|
|
|
|
array.insert(contentsOf: [User(id: 3, name: "Blob Sr."), User(id: 2, name: "Blob Jr.")], at: 0)
|
|
XCTAssertEqual(
|
|
array,
|
|
[User(id: 3, name: "Blob Sr."), User(id: 2, name: "Blob Jr."), User(id: 1, name: "Blob")]
|
|
)
|
|
}
|
|
|
|
func testRemoveAt() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [
|
|
User(id: 3, name: "Blob Sr."),
|
|
User(id: 2, name: "Blob Jr."),
|
|
User(id: 1, name: "Blob"),
|
|
]
|
|
|
|
array.remove(at: 1)
|
|
XCTAssertEqual(array, [User(id: 3, name: "Blob Sr."), User(id: 1, name: "Blob")])
|
|
}
|
|
|
|
func testRemoveAllWhere() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [
|
|
User(id: 3, name: "Blob Sr."),
|
|
User(id: 2, name: "Blob Jr."),
|
|
User(id: 1, name: "Blob"),
|
|
]
|
|
|
|
array.removeAll(where: { $0.name.starts(with: "Blob ") })
|
|
XCTAssertEqual(array, [User(id: 1, name: "Blob")])
|
|
}
|
|
|
|
func testRemoveAtOffsets() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [
|
|
User(id: 3, name: "Blob Sr."),
|
|
User(id: 2, name: "Blob Jr."),
|
|
User(id: 1, name: "Blob"),
|
|
]
|
|
|
|
array.remove(atOffsets: [0, 2])
|
|
XCTAssertEqual(array, [User(id: 2, name: "Blob Jr.")])
|
|
}
|
|
|
|
func testMoveFromOffsets() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [
|
|
User(id: 3, name: "Blob Sr."),
|
|
User(id: 2, name: "Blob Jr."),
|
|
User(id: 1, name: "Blob"),
|
|
]
|
|
|
|
array.move(fromOffsets: [0], toOffset: 2)
|
|
XCTAssertEqual(
|
|
array,
|
|
[User(id: 2, name: "Blob Jr."), User(id: 3, name: "Blob Sr."), User(id: 1, name: "Blob")]
|
|
)
|
|
}
|
|
|
|
func testReplaceSubrange() {
|
|
struct User: Equatable, Identifiable {
|
|
let id: Int
|
|
var name: String
|
|
}
|
|
|
|
var array: IdentifiedArray = [
|
|
User(id: 3, name: "Blob Sr."),
|
|
User(id: 2, name: "Blob Jr."),
|
|
User(id: 1, name: "Blob"),
|
|
User(id: 2, name: "Blob Jr."),
|
|
]
|
|
|
|
array.replaceSubrange(
|
|
0...1,
|
|
with: [
|
|
User(id: 4, name: "Flob IV"),
|
|
User(id: 5, name: "Flob V"),
|
|
]
|
|
)
|
|
|
|
XCTAssertEqual(
|
|
array,
|
|
[
|
|
User(id: 4, name: "Flob IV"), User(id: 5, name: "Flob V"), User(id: 1, name: "Blob"),
|
|
User(id: 2, name: "Blob Jr."),
|
|
]
|
|
)
|
|
}
|
|
}
|