Skip to content

Commit e1893df

Browse files
authored
Merge pull request #37 from fslaborg/test/vector-module-permuteby-20251012-154853-6fb6d889-d52998c6660d0f24
Daily Test Coverage Improver - Add comprehensive tests for Vector.permuteBy
2 parents 6a289eb + 6635038 commit e1893df

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

‎tests/FsMath.Tests/VectorModuleTests.fs‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,66 @@ module VectorModuleTests =
236236
let v = [| 1.0; 2.0; 3.0 |]
237237
let result = Vector.sub 3 v
238238
Assert.Empty(result)
239+
240+
// Tests for permuteBy function
241+
[<Fact>]
242+
let ``permuteBy: applies identity permutation`` () =
243+
let v = [| 1.0; 2.0; 3.0; 4.0 |]
244+
let P = Permutation.identity
245+
let result = Vector.permuteBy P v
246+
floatArrayClose [| 1.0; 2.0; 3.0; 4.0 |] result 1e-10
247+
248+
[<Fact>]
249+
let ``permuteBy: applies simple permutation`` () =
250+
// Permutation: [2, 0, 1] means result[0] = v[2], result[1] = v[0], result[2] = v[1]
251+
let v = [| 10.0; 20.0; 30.0 |]
252+
let P = Permutation.ofArray [| 2; 0; 1 |]
253+
let result = Vector.permuteBy P v
254+
floatArrayClose [| 30.0; 10.0; 20.0 |] result 1e-10
255+
256+
[<Fact>]
257+
let ``permuteBy: applies swap permutation`` () =
258+
let v = [| 1.0; 2.0; 3.0; 4.0; 5.0 |]
259+
let P = Permutation.swap 1 3 // Swap indices 1 and 3
260+
let result = Vector.permuteBy P v
261+
floatArrayClose [| 1.0; 4.0; 3.0; 2.0; 5.0 |] result 1e-10
262+
263+
[<Fact>]
264+
let ``permuteBy: applies reversal permutation`` () =
265+
let v = [| 1.0; 2.0; 3.0; 4.0; 5.0 |]
266+
let P = Permutation.reversal 5
267+
let result = Vector.permuteBy P v
268+
floatArrayClose [| 5.0; 4.0; 3.0; 2.0; 1.0 |] result 1e-10
269+
270+
[<Fact>]
271+
let ``permuteBy: applies rotation permutation`` () =
272+
let v = [| 1.0; 2.0; 3.0; 4.0 |]
273+
let P = Permutation.rotation 4 1 // Rotate right by 1
274+
let result = Vector.permuteBy P v
275+
floatArrayClose [| 2.0; 3.0; 4.0; 1.0 |] result 1e-10
276+
277+
[<Fact>]
278+
let ``permuteBy: works with single element`` () =
279+
let v = [| 42.0 |]
280+
let P = Permutation.identity
281+
let result = Vector.permuteBy P v
282+
floatArrayClose [| 42.0 |] result 1e-10
283+
284+
[<Fact>]
285+
let ``permuteBy: double permutation equals inverse`` () =
286+
// Applying a permutation twice with its inverse should return original
287+
let v = [| 1.0; 2.0; 3.0; 4.0 |]
288+
let pArray = [| 2; 0; 3; 1 |]
289+
let P = Permutation.ofArray pArray
290+
let Pinv = Permutation.inverse 4 P
291+
let permuted = Vector.permuteBy P v
292+
let restored = Vector.permuteBy Pinv permuted
293+
floatArrayClose v restored 1e-10
294+
295+
[<Fact>]
296+
let ``permuteBy: works with integers`` () =
297+
let v = [| 10; 20; 30; 40 |]
298+
let P = Permutation.ofArray [| 3; 2; 1; 0 |]
299+
let result = Vector.permuteBy P v
300+
let expected = [| 40; 30; 20; 10 |]
301+
Assert.Equal<int[]>(expected, result)

0 commit comments

Comments
 (0)