// // FamilyTests.swift // FirebladeECSTests // // Created by Christian Treffs on 09.10.17. // @testable import FirebladeECS import XCTest class FamilyTests: XCTestCase { var nexus: Nexus! override func setUp() { super.setUp() nexus = Nexus() } override func tearDown() { nexus = nil super.tearDown() } func createDefaultEntity() { let e = nexus.createEntity() e.assign(Position(x: 1, y: 2)) e.assign(Color()) } func testFamilyCreation() { let family = nexus.family(requires: Position.self, excludesAll: Name.self) XCTAssertTrue(family.nexus === self.nexus) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(nexus.numEntities, 0) XCTAssertFalse(family.traits.description.isEmpty) XCTAssertFalse(family.traits.debugDescription.isEmpty) let traits = FamilyTraitSet(requiresAll: [Position.self], excludesAll: [Name.self]) XCTAssertEqual(family.traits, traits) } func testFamilyReuse() { let familyA = nexus.family(requires: Position.self, excludesAll: Name.self) let familyB = nexus.family(requires: Position.self, excludesAll: Name.self) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(familyA, familyB) } func testFamilyAbandoned() { XCTAssertEqual(nexus.numFamilies, 0) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(nexus.numEntities, 0) _ = nexus.family(requires: Position.self) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(nexus.numEntities, 0) let entity = nexus.createEntity() XCTAssertFalse(entity.has(Position.self)) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(nexus.numEntities, 1) entity.assign(Position(x: 1, y: 1)) XCTAssertTrue(entity.has(Position.self)) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 1) XCTAssertEqual(nexus.numEntities, 1) entity.remove(Position.self) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(nexus.numEntities, 1) nexus.destroy(entity: entity) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 0) XCTAssertEqual(nexus.numEntities, 0) } func testFamilyLateMember() { let eEarly = nexus.createEntity(with: Position(x: 1, y: 2)) XCTAssertEqual(nexus.numFamilies, 0) XCTAssertEqual(nexus.numComponents, 1) XCTAssertEqual(nexus.numEntities, 1) let family = nexus.family(requires: Position.self) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 1) XCTAssertEqual(nexus.numEntities, 1) let eLate = nexus.createEntity(with: Position(x: 1, y: 2)) XCTAssertEqual(nexus.numFamilies, 1) XCTAssertEqual(nexus.numComponents, 2) XCTAssertEqual(nexus.numEntities, 2) XCTAssertTrue(family.isMember(eEarly)) XCTAssertTrue(family.isMember(eLate)) } func testFamilyExchange() { let number: Int = 10 for i in 0..