Skip to content

Commit 235e3ac

Browse files
committed
decode_uvfits_baseline() calculation fixed. Fixes #36
1 parent 3dd75ae commit 235e3ac

File tree

1 file changed

+107
-1
lines changed

1 file changed

+107
-1
lines changed

src/io/uvfits.rs

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub const fn encode_uvfits_baseline(ant1: usize, ant2: usize) -> usize {
8080
/// start at 1.
8181
#[allow(dead_code)]
8282
pub const fn decode_uvfits_baseline(bl: usize) -> (usize, usize) {
83-
if bl < 65_535 {
83+
if bl <= 65_535 {
8484
let ant2 = bl % 256;
8585
let ant1 = (bl - ant2) / 256;
8686
(ant1, ant2)
@@ -2830,4 +2830,110 @@ mod tests {
28302830
}
28312831
}
28322832
}
2833+
2834+
#[test]
2835+
fn test_encode_uvfits_baseline_256t() {
2836+
// test hand calculated edge cases
2837+
assert_eq!(encode_uvfits_baseline(1,1), 257);
2838+
assert_eq!(encode_uvfits_baseline(1,2), 258);
2839+
assert_eq!(encode_uvfits_baseline(1,255), 511);
2840+
assert_eq!(encode_uvfits_baseline(1,256), 67840);
2841+
assert_eq!(encode_uvfits_baseline(127,127), 32639);
2842+
assert_eq!(encode_uvfits_baseline(127,255), 32767);
2843+
assert_eq!(encode_uvfits_baseline(127,256), 325888);
2844+
assert_eq!(encode_uvfits_baseline(128,128), 32896);
2845+
assert_eq!(encode_uvfits_baseline(128,255), 33023);
2846+
assert_eq!(encode_uvfits_baseline(128,256), 327936);
2847+
assert_eq!(encode_uvfits_baseline(254,254), 65278);
2848+
assert_eq!(encode_uvfits_baseline(254,255), 65279);
2849+
assert_eq!(encode_uvfits_baseline(254,256), 585984);
2850+
assert_eq!(encode_uvfits_baseline(255,255), 65535);
2851+
assert_eq!(encode_uvfits_baseline(255,256), 588032);
2852+
assert_eq!(encode_uvfits_baseline(256,256), 590080);
2853+
}
2854+
2855+
#[test]
2856+
fn test_decode_uvfits_baseline_256t() {
2857+
// Test hand calculated edge cases
2858+
assert_eq!(decode_uvfits_baseline(257), (1,1));
2859+
assert_eq!(decode_uvfits_baseline(258), (1,2));
2860+
assert_eq!(decode_uvfits_baseline(511), (1,255));
2861+
assert_eq!(decode_uvfits_baseline(67840), (1,256));
2862+
assert_eq!(decode_uvfits_baseline(32639), (127,127));
2863+
assert_eq!(decode_uvfits_baseline(32767), (127,255));
2864+
assert_eq!(decode_uvfits_baseline(325888), (127,256));
2865+
assert_eq!(decode_uvfits_baseline(32896), (128,128));
2866+
assert_eq!(decode_uvfits_baseline(33023), (128,255));
2867+
assert_eq!(decode_uvfits_baseline(327936), (128,256));
2868+
assert_eq!(decode_uvfits_baseline(65278), (254,254));
2869+
assert_eq!(decode_uvfits_baseline(65279), (254,255));
2870+
assert_eq!(decode_uvfits_baseline(585984), (254,256));
2871+
assert_eq!(decode_uvfits_baseline(65535), (255,255));
2872+
assert_eq!(decode_uvfits_baseline(588032), (255,256));
2873+
assert_eq!(decode_uvfits_baseline(590080), (256,256));
2874+
}
28332875
}
2876+
2877+
#[test]
2878+
fn test_encode_decode_uvfits_all_baselines_128t() {
2879+
// Test all baselines can be encoded then decoded correctly
2880+
// MWAX 128T
2881+
let n_ants: usize= 128;
2882+
2883+
for ant1 in 1..=n_ants {
2884+
for ant2 in ant1..=n_ants {
2885+
let bl = encode_uvfits_baseline(ant1, ant2);
2886+
let (a1,a2) = decode_uvfits_baseline(bl);
2887+
assert_eq!(a1, ant1);
2888+
assert_eq!(a2, ant2);
2889+
}
2890+
}
2891+
}
2892+
2893+
#[test]
2894+
fn test_encode_decode_uvfits_all_baselines_256t() {
2895+
// Test all baselines can be encoded then decoded correctly
2896+
// MWAX 256T
2897+
let n_ants: usize= 256;
2898+
2899+
for ant1 in 1..=n_ants {
2900+
for ant2 in ant1..=n_ants {
2901+
let bl = encode_uvfits_baseline(ant1, ant2);
2902+
let (a1,a2) = decode_uvfits_baseline(bl);
2903+
assert_eq!(a1, ant1);
2904+
assert_eq!(a2, ant2);
2905+
}
2906+
}
2907+
}
2908+
2909+
#[test]
2910+
fn test_encode_decode_uvfits_all_baselines_264t() {
2911+
// Test all baselines can be encoded then decoded correctly
2912+
// MWAX 256T + 1 more receiver
2913+
let n_ants: usize= 264;
2914+
2915+
for ant1 in 1..=n_ants {
2916+
for ant2 in ant1..=n_ants {
2917+
let bl = encode_uvfits_baseline(ant1, ant2);
2918+
let (a1,a2) = decode_uvfits_baseline(bl);
2919+
assert_eq!(a1, ant1);
2920+
assert_eq!(a2, ant2);
2921+
}
2922+
}
2923+
}
2924+
2925+
#[test]
2926+
fn test_encode_decode_uvfits_all_baselines_512t() {
2927+
// Test all baselines can be encoded then decoded correctly
2928+
// MWAX 512T (Phase 4(!))
2929+
let n_ants: usize= 512;
2930+
2931+
for ant1 in 1..=n_ants {
2932+
for ant2 in ant1..=n_ants {
2933+
let bl = encode_uvfits_baseline(ant1, ant2);
2934+
let (a1,a2) = decode_uvfits_baseline(bl);
2935+
assert_eq!(a1, ant1);
2936+
assert_eq!(a2, ant2);
2937+
}
2938+
}
2939+
}

0 commit comments

Comments
 (0)