Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions tests/FsMath.Tests/VectorOpsCoverageTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -426,3 +426,38 @@ module VectorOpsCoverageTests =
let result1 = evalQ <@ scalar .* (v1 .+ v2) @>
let result2 = evalQ <@ (scalar .* v1) .+ (scalar .* v2) @>
floatArrayClose result1 result2 1e-10

// ========================================
// Quotation tests for @ operator
// Note: @ operator currently calls Power.Invoke (not Dot.Invoke despite the comment)
// ========================================

[<Fact>]
let ``operator @_Q: applies power operation`` () =
let v = [| 2.0; 3.0; 4.0 |]
let result = evalQ <@ v @ 2.0 @>
floatArrayClose [| 4.0; 9.0; 16.0 |] result 1e-10

[<Fact>]
let ``operator @_Q: fractional power`` () =
let v = [| 4.0; 9.0; 16.0 |]
let result = evalQ <@ v @ 0.5 @>
floatArrayClose [| 2.0; 3.0; 4.0 |] result 1e-10

[<Fact>]
let ``operator @_Q: negative power`` () =
let v = [| 2.0; 4.0; 5.0 |]
let result = evalQ <@ v @ -1.0 @>
floatArrayClose [| 0.5; 0.25; 0.2 |] result 1e-10

[<Fact>]
let ``operator @_Q: power of zero`` () =
let v = [| 2.0; 3.0; 4.0 |]
let result = evalQ <@ v @ 0.0 @>
floatArrayClose [| 1.0; 1.0; 1.0 |] result 1e-10

[<Fact>]
let ``operator @_Q: integer power`` () =
let v = [| 2.0; 3.0; 4.0 |]
let result = evalQ <@ v @ 3.0 @>
floatArrayClose [| 8.0; 27.0; 64.0 |] result 1e-10
46 changes: 46 additions & 0 deletions tests/FsMath.Tests/VectorOpsTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -301,3 +301,49 @@ module VectorOpsTests =
let result1 = scalar .* (v1 .+ v2)
let result2 = (scalar .* v1) .+ (scalar .* v2)
floatArrayClose result1 result2 1e-10

// =============================================
// @ Operator Tests (Power operator - NOTE: Comment in VectorOps.fs incorrectly says "Dot product")
// =============================================

[<Fact>]
let ``@ operator applies power operation (float)`` () =
// The @ operator currently calls Power.Invoke, not Dot.Invoke
// despite the comment saying "// Dot product ( @ )"
let v = [| 2.0; 3.0; 4.0 |]
let power = 2.0
let result = v @ power
let expected = [| 4.0; 9.0; 16.0 |]
floatArrayClose expected result 1e-10

[<Fact>]
let ``@ operator with fractional power (float)`` () =
let v = [| 4.0; 9.0; 16.0 |]
let power = 0.5
let result = v @ power
let expected = [| 2.0; 3.0; 4.0 |]
floatArrayClose expected result 1e-10

[<Fact>]
let ``@ operator with negative power (float)`` () =
let v = [| 2.0; 4.0; 5.0 |]
let power = -1.0
let result = v @ power
let expected = [| 0.5; 0.25; 0.2 |]
floatArrayClose expected result 1e-10

[<Fact>]
let ``@ operator with zero power returns ones (float)`` () =
let v = [| 2.0; 3.0; 4.0 |]
let power = 0.0
let result = v @ power
let expected = [| 1.0; 1.0; 1.0 |]
floatArrayClose expected result 1e-10

[<Fact>]
let ``@ operator with integer power (float)`` () =
let v = [| 2.0; 3.0; 4.0 |]
let power = 3.0
let result = v @ power
let expected = [| 8.0; 27.0; 64.0 |]
floatArrayClose expected result 1e-10
Loading