Added closure-based initializer function for Vector and corresponding unit test
This commit is contained in:
parent
2d370f39de
commit
254da517d9
|
@ -46,6 +46,17 @@ public struct Vector<Scalar> where Scalar: FloatingPoint, Scalar: ExpressibleByF
|
||||||
self.dimensions = scalars.count
|
self.dimensions = scalars.count
|
||||||
self.scalars = scalars
|
self.scalars = scalars
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public init(dimensions: Int, _ closure: (Int) throws -> Scalar) rethrows {
|
||||||
|
var scalars: [Scalar] = []
|
||||||
|
scalars.reserveCapacity(dimensions)
|
||||||
|
|
||||||
|
for index in 0..<dimensions {
|
||||||
|
scalars.append(try closure(index))
|
||||||
|
}
|
||||||
|
|
||||||
|
self.init(scalars)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - ExpressibleByArrayLiteral
|
// MARK: - ExpressibleByArrayLiteral
|
||||||
|
|
|
@ -27,6 +27,19 @@ import XCTest
|
||||||
class VectorTests: XCTestCase {
|
class VectorTests: XCTestCase {
|
||||||
// MARK: - Initialization
|
// MARK: - Initialization
|
||||||
|
|
||||||
|
func test_init_dimensions_repeatedValue() {
|
||||||
|
typealias Scalar = Double
|
||||||
|
|
||||||
|
let dimensions = 5
|
||||||
|
let repeatedValue: Scalar = 42
|
||||||
|
|
||||||
|
let actual: Vector<Scalar> = Vector(dimensions: dimensions, repeatedValue: repeatedValue)
|
||||||
|
|
||||||
|
let expected: Vector<Scalar> = [42, 42, 42, 42, 42]
|
||||||
|
|
||||||
|
XCTAssertEqual(actual, expected)
|
||||||
|
}
|
||||||
|
|
||||||
func test_init() {
|
func test_init() {
|
||||||
typealias Scalar = Double
|
typealias Scalar = Double
|
||||||
|
|
||||||
|
@ -36,6 +49,16 @@ class VectorTests: XCTestCase {
|
||||||
XCTAssertEqual(lhs.scalars, values)
|
XCTAssertEqual(lhs.scalars, values)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func test_init_dimensions_closure() {
|
||||||
|
typealias Scalar = Double
|
||||||
|
|
||||||
|
let dimensions = 5
|
||||||
|
let actual: Vector<Scalar> = Vector(dimensions: dimensions) { Scalar($0) }
|
||||||
|
let expected: Vector<Scalar> = [0, 1, 2, 3, 4]
|
||||||
|
|
||||||
|
XCTAssertEqual(actual, expected)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Subscript
|
// MARK: - Subscript
|
||||||
|
|
||||||
func test_subscript() {
|
func test_subscript() {
|
||||||
|
|
Loading…
Reference in New Issue