174 lines
6 KiB
Swift
174 lines
6 KiB
Swift
//
|
|
// AlgorithmsTests.swift
|
|
// Terrain2Tests
|
|
//
|
|
// Created by Eryn Wells on 11/8/18.
|
|
// Copyright © 2018 Eryn Wells. All rights reserved.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import Terrain2
|
|
|
|
fileprivate typealias Box = DiamondSquareGenerator.Box
|
|
fileprivate typealias Point = DiamondSquareGenerator.Point
|
|
fileprivate typealias Size = DiamondSquareGenerator.Size
|
|
|
|
class DiamondSquareAlgorithmPerformanceTests: XCTestCase {
|
|
func testAlgorithmOn129() {
|
|
let box = Box(origin: Point(x: 0, y: 0), size: Size(w: 129, h: 129))
|
|
let alg = DiamondSquareGenerator.Algorithm(grid: box)
|
|
measure {
|
|
let prog = Progress(totalUnitCount: 1)
|
|
_ = alg.render(progress: prog)
|
|
}
|
|
}
|
|
}
|
|
|
|
class DiamondSquareAlgorithmTests: XCTestCase {
|
|
fileprivate let grid = Box(origin: Point(x: 0, y: 0), size: Size(w: 5, h: 5))
|
|
|
|
lazy var alg = {
|
|
DiamondSquareGenerator.Algorithm(grid: grid)
|
|
}()
|
|
|
|
func testPointToIndexConversion() {
|
|
let idx = alg.convert(pointToIndex: Point(x: 2, y: 2))
|
|
XCTAssertEqual(idx, 12)
|
|
}
|
|
|
|
// MARK: Diamond Corners
|
|
|
|
// func testDiamondCornersNorth() {
|
|
// let corners = alg.diamondCorners(forPoint: Point(x: 2, y: 0), diamondSize: grid.size)
|
|
// XCTAssertEqual(corners.count, 4)
|
|
// XCTAssertEqual(corners[0], Point(x: 2, y: 2))
|
|
// XCTAssertEqual(corners[1], Point(x: 0, y: 0))
|
|
// XCTAssertEqual(corners[2], Point(x: 2, y: 2))
|
|
// XCTAssertEqual(corners[3], Point(x: 4, y: 0))
|
|
// }
|
|
//
|
|
// func testDiamondCornersWest() {
|
|
// let corners = alg.diamondCorners(forPoint: Point(x: 0, y: 2), diamondSize: grid.size)
|
|
// XCTAssertEqual(corners.count, 4)
|
|
// XCTAssertEqual(corners[0], Point(x: 0, y: 0))
|
|
// XCTAssertEqual(corners[1], Point(x: 2, y: 2))
|
|
// XCTAssertEqual(corners[2], Point(x: 0, y: 4))
|
|
// XCTAssertEqual(corners[3], Point(x: 2, y: 2))
|
|
// }
|
|
//
|
|
// func testDiamondCornersSouth() {
|
|
// let corners = alg.diamondCorners(forPoint: Point(x: 2, y: 4), diamondSize: grid.size)
|
|
// XCTAssertEqual(corners.count, 4)
|
|
// XCTAssertEqual(corners[0], Point(x: 2, y: 2))
|
|
// XCTAssertEqual(corners[1], Point(x: 0, y: 4))
|
|
// XCTAssertEqual(corners[2], Point(x: 2, y: 2))
|
|
// XCTAssertEqual(corners[3], Point(x: 4, y: 4))
|
|
// }
|
|
//
|
|
// func testDiamondCornersEast() {
|
|
// let corners = alg.diamondCorners(forPoint: Point(x: 4, y: 2), diamondSize: grid.size)
|
|
// XCTAssertEqual(corners.count, 4)
|
|
// XCTAssertEqual(corners[0], Point(x: 4, y: 0))
|
|
// XCTAssertEqual(corners[1], Point(x: 2, y: 2))
|
|
// XCTAssertEqual(corners[2], Point(x: 4, y: 4))
|
|
// XCTAssertEqual(corners[3], Point(x: 2, y: 2))
|
|
// }
|
|
}
|
|
|
|
class DiamondSquareBoxTests: XCTestCase {
|
|
fileprivate let box = Box(origin: Point(x: 0, y: 0), size: Size(w: 5, h: 5))
|
|
|
|
func testMidpoint() {
|
|
let midpoint = box.midpoint
|
|
XCTAssertEqual(midpoint.x, 2)
|
|
XCTAssertEqual(midpoint.y, 2)
|
|
}
|
|
|
|
func testSubdivision() {
|
|
let subdivs = box.subdivisions
|
|
XCTAssertEqual(subdivs.count, 4)
|
|
XCTAssertEqual(subdivs[0], Box(origin: Point(x: 0, y: 0), size: Size(w: 3, h: 3)))
|
|
XCTAssertEqual(subdivs[1], Box(origin: Point(x: 2, y: 0), size: Size(w: 3, h: 3)))
|
|
XCTAssertEqual(subdivs[2], Box(origin: Point(x: 0, y: 2), size: Size(w: 3, h: 3)))
|
|
XCTAssertEqual(subdivs[3], Box(origin: Point(x: 2, y: 2), size: Size(w: 3, h: 3)))
|
|
}
|
|
|
|
func testBFS() {
|
|
var expectedBoxes: [Box] = [
|
|
box,
|
|
|
|
Box(origin: Point(x: 0, y: 0), size: Size(w: 3, h: 3)),
|
|
Box(origin: Point(x: 2, y: 0), size: Size(w: 3, h: 3)),
|
|
Box(origin: Point(x: 0, y: 2), size: Size(w: 3, h: 3)),
|
|
Box(origin: Point(x: 2, y: 2), size: Size(w: 3, h: 3)),
|
|
|
|
// Box(origin: Point(x: 0, y: 0), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 1, y: 0), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 0, y: 1), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 1, y: 1), size: Size(w: 2, h: 2)),
|
|
//
|
|
// Box(origin: Point(x: 2, y: 0), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 3, y: 0), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 2, y: 1), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 3, y: 1), size: Size(w: 2, h: 2)),
|
|
//
|
|
// Box(origin: Point(x: 0, y: 2), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 1, y: 2), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 0, y: 3), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 1, y: 3), size: Size(w: 2, h: 2)),
|
|
//
|
|
// Box(origin: Point(x: 2, y: 2), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 3, y: 2), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 2, y: 3), size: Size(w: 2, h: 2)),
|
|
// Box(origin: Point(x: 3, y: 3), size: Size(w: 2, h: 2)),
|
|
].reversed()
|
|
|
|
let prog = Progress(totalUnitCount: 1)
|
|
box.breadthFirstSearch(progress: prog) { (box: Box) -> (Void) in
|
|
let exBox = expectedBoxes.popLast()
|
|
XCTAssertNotNil(exBox)
|
|
XCTAssertEqual(box, exBox!)
|
|
}
|
|
XCTAssertEqual(expectedBoxes.count, 0)
|
|
}
|
|
|
|
// MARK: Sides
|
|
|
|
func testNorth() {
|
|
XCTAssertEqual(box.north, Point(x: 2, y: 0))
|
|
}
|
|
|
|
func testWest() {
|
|
XCTAssertEqual(box.west, Point(x: 0, y: 2))
|
|
}
|
|
|
|
func testSouth() {
|
|
XCTAssertEqual(box.south, Point(x: 2, y: 4))
|
|
}
|
|
|
|
func testEast() {
|
|
XCTAssertEqual(box.east, Point(x: 4, y: 2))
|
|
}
|
|
|
|
// MARK: Corners
|
|
|
|
func testNorthwest() {
|
|
let pt = box.northwest
|
|
XCTAssertEqual(pt, Point())
|
|
}
|
|
|
|
func testNortheast() {
|
|
let pt = box.northeast
|
|
XCTAssertEqual(pt, Point(x: 4, y: 0))
|
|
}
|
|
|
|
func testSouthwest() {
|
|
let pt = box.southwest
|
|
XCTAssertEqual(pt, Point(x: 0, y: 4))
|
|
}
|
|
|
|
func testSoutheast() {
|
|
let pt = box.southeast
|
|
XCTAssertEqual(pt, Point(x: 4, y: 4))
|
|
}
|
|
}
|