summaryrefslogtreecommitdiff
path: root/LA
diff options
context:
space:
mode:
authorArturs Artamonovs <arturs.artamonovs@protonmail.com>2024-10-25 10:29:54 +0100
committerArturs Artamonovs <arturs.artamonovs@protonmail.com>2024-10-25 10:29:54 +0100
commitf3f0f90a51412d1684b43be6f2b5f93cb4154ee0 (patch)
treeac8c4df68d9d1046bd438abe3d6a258e48e95cf2 /LA
parent8f8f78cd00d3b5e5ce5076d316f2499df35d532f (diff)
downloadPrySDR-f3f0f90a51412d1684b43be6f2b5f93cb4154ee0.tar.gz
PrySDR-f3f0f90a51412d1684b43be6f2b5f93cb4154ee0.zip
Initial empty project structure
Diffstat (limited to 'LA')
-rw-r--r--LA/Lib/Matrix.swift73
-rw-r--r--LA/Test/MatrixBenchmark.swift7
-rw-r--r--LA/Test/MatrixOperations.swift8
-rw-r--r--LA/Test/MatrixXT/MatrixXT.swift53
4 files changed, 141 insertions, 0 deletions
diff --git a/LA/Lib/Matrix.swift b/LA/Lib/Matrix.swift
new file mode 100644
index 0000000..8b3f538
--- /dev/null
+++ b/LA/Lib/Matrix.swift
@@ -0,0 +1,73 @@
+//
+// Matrix.swift
+// PrySDR
+//
+// Created by Jacky Jack on 20/10/2024.
+//
+
+enum MatrixOperationError:Error {
+ case columnValue
+ case rowValue
+}
+
+/// Matrix Data Type
+class Matrix {
+ /// matrix row number
+ let rows: Int
+ /// matrix column number
+ let columns: Int
+ /// array where matrix is stored
+ var data: [Float]
+
+ /// Create NxM matrix
+ /// - Parameters:
+ /// - rows: number of rows in matrix
+ /// - columns: number of columns in matrix
+ /// - val: default value of matrix elements
+ init(rows: Int, columns: Int, val: Float) throws {
+ if (rows < 1) {
+ throw MatrixOperationError.columnValue
+ }
+ if (columns < 1) {
+ throw MatrixOperationError.rowValue
+ }
+ self.rows = rows
+ self.columns = columns
+ self.data = Array(repeating: 0.0, count: rows*columns)
+ //print(self.data)
+ }
+
+ /// Set elements to value
+ /// - Parameters:
+ /// - val: value to set
+ func set(_ val: Float) {
+ for idx in 0..<self.data.count {
+ self.data[idx] = val
+ }
+ }
+ /// Set all elements to 0
+ func zero() {
+ self.set(0.0)
+ }
+
+ /// Set all elements to 1
+ func one() {
+ self.set(1.0)
+ }
+}
+
+/// Return 0 matrix
+/// - Parameters:
+/// - rows: number of rows in matrix
+/// - columns: number of columns in matrix
+func zero(_ rows: Int, _ columns: Int) -> Matrix {
+ return try! Matrix.init(rows: rows, columns: columns, val: 0.0)
+}
+
+/// Return identity matrix
+/// - Parameters:
+/// - rows: number of rows in matrix
+/// - columns: number of columns in matrix
+func one(_ rows: Int, _ columns: Int) -> Matrix {
+ return try! Matrix.init(rows: rows, columns: columns, val: 1.0)
+}
diff --git a/LA/Test/MatrixBenchmark.swift b/LA/Test/MatrixBenchmark.swift
new file mode 100644
index 0000000..7057b9e
--- /dev/null
+++ b/LA/Test/MatrixBenchmark.swift
@@ -0,0 +1,7 @@
+//
+// MatrixBenchmark.swift
+// PrySDR
+//
+// Created by Jacky Jack on 21/10/2024.
+//
+
diff --git a/LA/Test/MatrixOperations.swift b/LA/Test/MatrixOperations.swift
new file mode 100644
index 0000000..a5ff995
--- /dev/null
+++ b/LA/Test/MatrixOperations.swift
@@ -0,0 +1,8 @@
+//
+// MatrixOperations.swift
+// PrySDR
+//
+// Created by Jacky Jack on 21/10/2024.
+//
+
+
diff --git a/LA/Test/MatrixXT/MatrixXT.swift b/LA/Test/MatrixXT/MatrixXT.swift
new file mode 100644
index 0000000..55661be
--- /dev/null
+++ b/LA/Test/MatrixXT/MatrixXT.swift
@@ -0,0 +1,53 @@
+//
+// MatrixXT.swift
+// MatrixXT
+//
+// Created by Jacky Jack on 21/10/2024.
+//
+
+import Testing
+
+struct MatrixXT {
+
+ @Test func example() async throws {
+ // Write your test here and use APIs like `#expect(...)` to check expected conditions.
+ }
+
+ @Test func matrix_create_with_init() async throws {
+ do {
+ let _ = try Matrix(row:-1,column: -1,val:0.0)
+ Issue.record("Should fail")
+ } catch {
+ //should allway get here,
+ }
+ do {
+ let _ = try Matrix(row: 0, column: 0, val: 0.0)
+ Issue.record("Should fail")
+ } catch {
+ //should allways get here
+ }
+ do {
+ let _ = try Matrix(row: 1, column: 1, val: 0.0)
+ } catch {
+ Issue.record("Failed")
+ }
+
+ do {
+ let _ = try Matrix(row: 2, column: 2, val: 0.0)
+ } catch {
+ Issue.record("Failed")
+ }
+ do {
+ let _ = try Matrix(row: 3, column: 3, val: 0.0)
+ } catch {
+ Issue.record("Failed")
+ }
+ do {
+ let _ = try Matrix(row:16, column: 16, val: 0.0)
+ } catch {
+ Issue.record("Failed")
+ }
+
+}
+
+}