|
46 | 46 | show(io, sample) |
47 | 47 | @test String(take!(io)) == |
48 | 48 | "DataSample(x=$(sample.x), θ_true=$(sample.θ_true), y_true=$(sample.y_true), instance=$(sample.instance))" |
| 49 | + |
| 50 | + # Test StatsBase methods |
| 51 | + using StatsBase: |
| 52 | + ZScoreTransform, |
| 53 | + UnitRangeTransform, |
| 54 | + fit, |
| 55 | + transform, |
| 56 | + transform!, |
| 57 | + reconstruct, |
| 58 | + reconstruct! |
| 59 | + |
| 60 | + # Create a dataset for testing |
| 61 | + N = 5 |
| 62 | + dataset = [random_sample() for _ in 1:N] |
| 63 | + |
| 64 | + # Test fit with ZScoreTransform |
| 65 | + zt = fit(ZScoreTransform, dataset) |
| 66 | + @test zt isa ZScoreTransform |
| 67 | + |
| 68 | + # Test fit with UnitRangeTransform |
| 69 | + ut = fit(UnitRangeTransform, dataset) |
| 70 | + @test ut isa UnitRangeTransform |
| 71 | + |
| 72 | + # Test transform (non-mutating) |
| 73 | + dataset_zt = transform(zt, dataset) |
| 74 | + @test length(dataset_zt) == length(dataset) |
| 75 | + @test all(d -> d isa DataSample, dataset_zt) |
| 76 | + |
| 77 | + # Check that other fields are preserved |
| 78 | + for i in 1:N |
| 79 | + @test dataset_zt[i].θ_true == dataset[i].θ_true |
| 80 | + @test dataset_zt[i].y_true == dataset[i].y_true |
| 81 | + @test dataset_zt[i].instance == dataset[i].instance |
| 82 | + end |
| 83 | + |
| 84 | + # Check that features are actually transformed |
| 85 | + @test dataset_zt[1].x != dataset[1].x |
| 86 | + |
| 87 | + # Test transform! (mutating) |
| 88 | + dataset_copy = deepcopy(dataset) |
| 89 | + original_x = copy(dataset_copy[1].x) |
| 90 | + transform!(ut, dataset_copy) |
| 91 | + @test dataset_copy[1].x != original_x |
| 92 | + |
| 93 | + # Check that other fields remain unchanged after transform! |
| 94 | + for i in 1:N |
| 95 | + @test dataset_copy[i].θ_true == dataset[i].θ_true |
| 96 | + @test dataset_copy[i].y_true == dataset[i].y_true |
| 97 | + @test dataset_copy[i].instance == dataset[i].instance |
| 98 | + end |
| 99 | + |
| 100 | + # Test reconstruct (non-mutating) |
| 101 | + dataset_reconstructed = reconstruct(zt, dataset_zt) |
| 102 | + @test length(dataset_reconstructed) == length(dataset) |
| 103 | + |
| 104 | + # Test round-trip consistency (should be close to original) |
| 105 | + for i in 1:N |
| 106 | + @test dataset_reconstructed[i].x ≈ dataset[i].x atol = 1e-10 |
| 107 | + @test dataset_reconstructed[i].θ_true == dataset[i].θ_true |
| 108 | + @test dataset_reconstructed[i].y_true == dataset[i].y_true |
| 109 | + @test dataset_reconstructed[i].instance == dataset[i].instance |
| 110 | + end |
| 111 | + |
| 112 | + # Test reconstruct! (mutating) |
| 113 | + reconstruct!(zt, dataset_zt) |
| 114 | + for i in 1:N |
| 115 | + @test dataset_zt[i].x ≈ dataset[i].x atol = 1e-10 |
| 116 | + end |
49 | 117 | end |
50 | 118 |
|
51 | 119 | @testitem "Maximizers" begin |
|
0 commit comments