diff --git a/Sources/FirebladeECS/UnorderedSparseSet.swift b/Sources/FirebladeECS/UnorderedSparseSet.swift index 5a3d2b9..977b113 100644 --- a/Sources/FirebladeECS/UnorderedSparseSet.swift +++ b/Sources/FirebladeECS/UnorderedSparseSet.swift @@ -17,10 +17,6 @@ public class UnorderedSparseSet { internal var dense: ContiguousArray internal var sparse: [Index: Key] - // TODO: implement - // a) RandomAccessCollection conformance - // b) subscript - public init() { sparse = [Index: Key]() dense = ContiguousArray() @@ -148,6 +144,7 @@ extension UnorderedSparseSet: MutableCollection, RandomAccessCollection { } return element } + set(newValue) { insert(newValue, at: position) } diff --git a/Tests/FirebladeECSTests/SparseSetTests.swift b/Tests/FirebladeECSTests/SparseSetTests.swift index 403e438..993899e 100644 --- a/Tests/FirebladeECSTests/SparseSetTests.swift +++ b/Tests/FirebladeECSTests/SparseSetTests.swift @@ -508,4 +508,35 @@ class SparseSetTests: XCTestCase { XCTAssertEqual(string, "Hello World") } + + func testSubscript() { + let characters = UnorderedSparseSet() + + characters[4] = "H" + characters[13] = "e" + characters[44] = "l" + characters[123] = "l" + characters[89] = "o" + + characters[66] = " " + characters[77] = "W" + characters[55] = "o" + characters[90] = "r" + characters[34] = "l" + characters[140] = "d" + + XCTAssertEqual(characters.count, 11) + + XCTAssertEqual(characters[4], "H") + XCTAssertEqual(characters[13], "e") + XCTAssertEqual(characters[44], "l") + XCTAssertEqual(characters[123], "l") + XCTAssertEqual(characters[89], "o") + XCTAssertEqual(characters[66], " ") + XCTAssertEqual(characters[77], "W") + XCTAssertEqual(characters[55], "o") + XCTAssertEqual(characters[90], "r") + XCTAssertEqual(characters[34], "l") + XCTAssertEqual(characters[140], "d") + } }