Skip to content

Commit 73ee6a3

Browse files
Add comprehensive tests for @ operator in VectorOps
- Added 5 regular tests for @ operator in VectorOpsTests.fs - Added 5 quotation-based tests in VectorOpsCoverageTests.fs - Achieved 100% coverage for VectorOpsSymbols class (up from 83.33%) - Overall coverage improved from 77.33% to 77.38% (+0.05%, +1 line) - Total test count: 1357 tests (up from 1347) Note: @ operator implementation calls Power.Invoke despite comment saying 'Dot product'. Tests validate current behavior. 🤖 Generated with Claude Code by Daily Test Coverage Improver Co-Authored-By: Claude <[email protected]>
1 parent 45bf8a0 commit 73ee6a3

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

tests/FsMath.Tests/VectorOpsCoverageTests.fs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,3 +426,38 @@ module VectorOpsCoverageTests =
426426
let result1 = evalQ <@ scalar .* (v1 .+ v2) @>
427427
let result2 = evalQ <@ (scalar .* v1) .+ (scalar .* v2) @>
428428
floatArrayClose result1 result2 1e-10
429+
430+
// ========================================
431+
// Quotation tests for @ operator
432+
// Note: @ operator currently calls Power.Invoke (not Dot.Invoke despite the comment)
433+
// ========================================
434+
435+
[<Fact>]
436+
let ``operator @_Q: applies power operation`` () =
437+
let v = [| 2.0; 3.0; 4.0 |]
438+
let result = evalQ <@ v @ 2.0 @>
439+
floatArrayClose [| 4.0; 9.0; 16.0 |] result 1e-10
440+
441+
[<Fact>]
442+
let ``operator @_Q: fractional power`` () =
443+
let v = [| 4.0; 9.0; 16.0 |]
444+
let result = evalQ <@ v @ 0.5 @>
445+
floatArrayClose [| 2.0; 3.0; 4.0 |] result 1e-10
446+
447+
[<Fact>]
448+
let ``operator @_Q: negative power`` () =
449+
let v = [| 2.0; 4.0; 5.0 |]
450+
let result = evalQ <@ v @ -1.0 @>
451+
floatArrayClose [| 0.5; 0.25; 0.2 |] result 1e-10
452+
453+
[<Fact>]
454+
let ``operator @_Q: power of zero`` () =
455+
let v = [| 2.0; 3.0; 4.0 |]
456+
let result = evalQ <@ v @ 0.0 @>
457+
floatArrayClose [| 1.0; 1.0; 1.0 |] result 1e-10
458+
459+
[<Fact>]
460+
let ``operator @_Q: integer power`` () =
461+
let v = [| 2.0; 3.0; 4.0 |]
462+
let result = evalQ <@ v @ 3.0 @>
463+
floatArrayClose [| 8.0; 27.0; 64.0 |] result 1e-10

tests/FsMath.Tests/VectorOpsTests.fs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,49 @@ module VectorOpsTests =
301301
let result1 = scalar .* (v1 .+ v2)
302302
let result2 = (scalar .* v1) .+ (scalar .* v2)
303303
floatArrayClose result1 result2 1e-10
304+
305+
// =============================================
306+
// @ Operator Tests (Power operator - NOTE: Comment in VectorOps.fs incorrectly says "Dot product")
307+
// =============================================
308+
309+
[<Fact>]
310+
let ``@ operator applies power operation (float)`` () =
311+
// The @ operator currently calls Power.Invoke, not Dot.Invoke
312+
// despite the comment saying "// Dot product ( @ )"
313+
let v = [| 2.0; 3.0; 4.0 |]
314+
let power = 2.0
315+
let result = v @ power
316+
let expected = [| 4.0; 9.0; 16.0 |]
317+
floatArrayClose expected result 1e-10
318+
319+
[<Fact>]
320+
let ``@ operator with fractional power (float)`` () =
321+
let v = [| 4.0; 9.0; 16.0 |]
322+
let power = 0.5
323+
let result = v @ power
324+
let expected = [| 2.0; 3.0; 4.0 |]
325+
floatArrayClose expected result 1e-10
326+
327+
[<Fact>]
328+
let ``@ operator with negative power (float)`` () =
329+
let v = [| 2.0; 4.0; 5.0 |]
330+
let power = -1.0
331+
let result = v @ power
332+
let expected = [| 0.5; 0.25; 0.2 |]
333+
floatArrayClose expected result 1e-10
334+
335+
[<Fact>]
336+
let ``@ operator with zero power returns ones (float)`` () =
337+
let v = [| 2.0; 3.0; 4.0 |]
338+
let power = 0.0
339+
let result = v @ power
340+
let expected = [| 1.0; 1.0; 1.0 |]
341+
floatArrayClose expected result 1e-10
342+
343+
[<Fact>]
344+
let ``@ operator with integer power (float)`` () =
345+
let v = [| 2.0; 3.0; 4.0 |]
346+
let power = 3.0
347+
let result = v @ power
348+
let expected = [| 8.0; 27.0; 64.0 |]
349+
floatArrayClose expected result 1e-10

0 commit comments

Comments
 (0)