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.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
|
||||
|
|
|
@ -27,6 +27,19 @@ import XCTest
|
|||
class VectorTests: XCTestCase {
|
||||
// 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() {
|
||||
typealias Scalar = Double
|
||||
|
||||
|
@ -36,6 +49,16 @@ class VectorTests: XCTestCase {
|
|||
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
|
||||
|
||||
func test_subscript() {
|
||||
|
|
Loading…
Reference in New Issue