Added closure-based initializer function for Matrix and corresponding unit test
This commit is contained in:
parent
8af8d180db
commit
2d370f39de
|
@ -65,6 +65,19 @@ public struct Matrix<Scalar> where Scalar: FloatingPoint, Scalar: ExpressibleByF
|
|||
self.grid = grid
|
||||
}
|
||||
|
||||
public init(rows: Int, columns: Int, _ closure: (_ row: Int, _ column: Int) throws -> Scalar) rethrows {
|
||||
var grid: [Scalar] = []
|
||||
grid.reserveCapacity(rows * columns)
|
||||
|
||||
for row in 0..<rows {
|
||||
for column in 0..<columns {
|
||||
grid.append(try closure(row, column))
|
||||
}
|
||||
}
|
||||
|
||||
self.init(rows: rows, columns: columns, grid: grid)
|
||||
}
|
||||
|
||||
public static func identity(size: Int) -> Matrix<Scalar> {
|
||||
return self.diagonal(rows: size, columns: size, repeatedValue: 1.0)
|
||||
}
|
||||
|
|
|
@ -99,6 +99,22 @@ class MatrixTests: XCTestCase {
|
|||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func test_init_rows_columns_closure() {
|
||||
typealias Scalar = Double
|
||||
|
||||
let columns = 4
|
||||
let actual: Matrix<Scalar> = Matrix(rows: 3, columns: columns) { row, column in
|
||||
Scalar((row * columns) + column)
|
||||
}
|
||||
let expected: Matrix<Scalar> = [
|
||||
[0, 1, 2, 3],
|
||||
[4, 5, 6, 7],
|
||||
[8, 9, 10, 11],
|
||||
]
|
||||
|
||||
XCTAssertEqual(actual, expected)
|
||||
}
|
||||
|
||||
func test_init_arrayLiteral() {
|
||||
typealias Scalar = Double
|
||||
|
||||
|
|
Loading…
Reference in New Issue