@@ -206,10 +206,33 @@ using Random
206206 @test 0.0 < results_pv[1 , 1 ]. pvalue ≤ 1.0
207207 end
208208
209- # ── Reverse complement ──────────────────────────────────────────────────────
209+ # ── Reverse complement ─────────────────────────────────────────────────
210210 @testset " compare_pfms – reverse complement" begin
211- # A motif and its reverse complement should be a perfect match
212- # when reverse_comp=true
211+ # Direct test of _reverse_complement_pfm transformation
212+ # Rows: A=1, C=2, G=3, T=4
213+ pfm_orig = [0.7 0.1 0.2 ; # A
214+ 0.1 0.6 0.1 ; # C
215+ 0.1 0.2 0.6 ; # G
216+ 0.1 0.1 0.1 ] # T
217+ pfm_rc = AverageLoglikelihoodRatio. _reverse_complement_pfm (pfm_orig)
218+
219+ # Columns must be reversed
220+ @test pfm_rc[:, 1 ] ≈ pfm_orig[[4 , 3 , 2 , 1 ], 3 ] # last col, rows swapped
221+ @test pfm_rc[:, 2 ] ≈ pfm_orig[[4 , 3 , 2 , 1 ], 2 ] # middle col, rows swapped
222+ @test pfm_rc[:, 3 ] ≈ pfm_orig[[4 , 3 , 2 , 1 ], 1 ] # first col, rows swapped
223+
224+ # Row order in RC: row i of RC = row (5-i) of original (at mirrored column)
225+ # A row of RC == T row of original (reversed)
226+ @test pfm_rc[1 , :] ≈ reverse (pfm_orig[4 , :]) # A ← T
227+ @test pfm_rc[2 , :] ≈ reverse (pfm_orig[3 , :]) # C ← G
228+ @test pfm_rc[3 , :] ≈ reverse (pfm_orig[2 , :]) # G ← C
229+ @test pfm_rc[4 , :] ≈ reverse (pfm_orig[1 , :]) # T ← A
230+
231+ # RC of RC must equal the original
232+ @test AverageLoglikelihoodRatio. _reverse_complement_pfm (pfm_rc) ≈ pfm_orig
233+
234+ # Width is preserved
235+ @test size (pfm_rc) == size (pfm_orig)
213236 motif = [0.9 0.05 0.05 ;
214237 0.05 0.85 0.05 ;
215238 0.025 0.05 0.85 ;
0 commit comments