Skip to content

Commit 271d53b

Browse files
committed
test: diversify Merge operator tests with more integer types
- Replace most Reverse<u32> tests with direct integer types (u32, i32, i64, u128) - Test with regular descending order integers instead of always using Reverse wrapper - Add tests with signed integers including negative values - Remove float tests since they don't implement Ord trait - Keep mix of Reverse tests and direct integer tests for better coverage The tests now better demonstrate the generic nature of the Merge algorithm with various integer types in their natural descending order.
1 parent 2a56db5 commit 271d53b

File tree

1 file changed

+140
-104
lines changed

1 file changed

+140
-104
lines changed

rust/types/src/execution/operator.rs

Lines changed: 140 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,122 +1529,102 @@ mod tests {
15291529
assert_eq!(result.len(), 5);
15301530
assert_eq!(
15311531
result,
1532-
vec![
1533-
Reverse(1),
1534-
Reverse(2),
1535-
Reverse(3),
1536-
Reverse(4),
1537-
Reverse(5)
1538-
]
1532+
vec![Reverse(1), Reverse(2), Reverse(3), Reverse(4), Reverse(5)]
15391533
);
15401534
}
15411535

15421536
#[test]
1543-
fn test_merge_with_duplicates() {
1544-
use std::cmp::Reverse;
1537+
fn test_merge_u32_descending() {
1538+
let merge = Merge { k: 6 };
1539+
1540+
// Regular u32 in descending order (largest first)
1541+
let input = vec![
1542+
vec![100u32, 75, 50, 25],
1543+
vec![90, 60, 30],
1544+
vec![95, 85, 70, 40, 10],
1545+
];
1546+
1547+
let result = merge.merge(input);
1548+
1549+
// Should get top-6 largest u32 values
1550+
assert_eq!(result.len(), 6);
1551+
assert_eq!(result, vec![100, 95, 90, 85, 75, 70]);
1552+
}
1553+
1554+
#[test]
1555+
fn test_merge_i32_descending() {
1556+
let merge = Merge { k: 5 };
1557+
1558+
// i32 values in descending order (including negatives)
1559+
let input = vec![
1560+
vec![50i32, 10, -10, -50],
1561+
vec![30, 0, -30],
1562+
vec![40, 20, -20, -40],
1563+
];
1564+
1565+
let result = merge.merge(input);
15451566

1567+
// Should get top-5 largest i32 values
1568+
assert_eq!(result.len(), 5);
1569+
assert_eq!(result, vec![50, 40, 30, 20, 10]);
1570+
}
1571+
1572+
#[test]
1573+
fn test_merge_with_duplicates() {
15461574
let merge = Merge { k: 10 };
15471575

1548-
// Input with duplicates both within and across vectors
1576+
// Input with duplicates using regular u32 in descending order
15491577
let input = vec![
1550-
vec![Reverse(1), Reverse(3), Reverse(3), Reverse(5), Reverse(7)],
1551-
vec![Reverse(2), Reverse(3), Reverse(6), Reverse(8)],
1552-
vec![Reverse(1), Reverse(4), Reverse(5), Reverse(9)],
1578+
vec![100u32, 80, 80, 60, 40],
1579+
vec![90, 80, 50, 30],
1580+
vec![100, 70, 60, 20],
15531581
];
15541582

15551583
let result = merge.merge(input);
15561584

15571585
// Duplicates should be removed
1558-
assert_eq!(
1559-
result,
1560-
vec![
1561-
Reverse(1),
1562-
Reverse(2),
1563-
Reverse(3),
1564-
Reverse(4),
1565-
Reverse(5),
1566-
Reverse(6),
1567-
Reverse(7),
1568-
Reverse(8),
1569-
Reverse(9)
1570-
]
1571-
);
1586+
assert_eq!(result, vec![100, 90, 80, 70, 60, 50, 40, 30, 20]);
15721587
}
15731588

15741589
#[test]
15751590
fn test_merge_empty_vectors() {
1576-
use std::cmp::Reverse;
1577-
15781591
let merge = Merge { k: 5 };
15791592

1580-
// All empty
1581-
let input: Vec<Vec<Reverse<u32>>> = vec![vec![], vec![], vec![]];
1593+
// All empty with u32
1594+
let input: Vec<Vec<u32>> = vec![vec![], vec![], vec![]];
15821595
let result = merge.merge(input);
15831596
assert_eq!(result.len(), 0);
15841597

1585-
// Some empty, some with data
1586-
let input = vec![
1587-
vec![],
1588-
vec![Reverse(1), Reverse(3), Reverse(5)],
1589-
vec![],
1590-
vec![Reverse(2), Reverse(4)],
1591-
];
1598+
// Some empty, some with data (u64)
1599+
let input = vec![vec![], vec![1000u64, 750, 500], vec![], vec![850, 600]];
15921600
let result = merge.merge(input);
1593-
assert_eq!(
1594-
result,
1595-
vec![
1596-
Reverse(1),
1597-
Reverse(2),
1598-
Reverse(3),
1599-
Reverse(4),
1600-
Reverse(5)
1601-
]
1602-
);
1601+
assert_eq!(result, vec![1000, 850, 750, 600, 500]);
16031602

1604-
// Single non-empty vector
1605-
let input = vec![
1606-
vec![],
1607-
vec![Reverse(1), Reverse(2), Reverse(3)],
1608-
vec![],
1609-
];
1603+
// Single non-empty vector (i32)
1604+
let input = vec![vec![], vec![100i32, 50, 25], vec![]];
16101605
let result = merge.merge(input);
1611-
assert_eq!(result, vec![Reverse(1), Reverse(2), Reverse(3)]);
1606+
assert_eq!(result, vec![100, 50, 25]);
16121607
}
16131608

16141609
#[test]
16151610
fn test_merge_k_boundary_conditions() {
1616-
use std::cmp::Reverse;
1617-
1618-
// k = 0
1611+
// k = 0 with u32
16191612
let merge = Merge { k: 0 };
1620-
let input = vec![
1621-
vec![Reverse(1), Reverse(3)],
1622-
vec![Reverse(2), Reverse(4)],
1623-
];
1613+
let input = vec![vec![100u32, 50], vec![75, 25]];
16241614
let result = merge.merge(input);
16251615
assert_eq!(result.len(), 0);
16261616

1627-
// k = 1
1617+
// k = 1 with i64
16281618
let merge = Merge { k: 1 };
1629-
let input = vec![
1630-
vec![Reverse(5), Reverse(10)],
1631-
vec![Reverse(3), Reverse(8)],
1632-
vec![Reverse(1), Reverse(7)],
1633-
];
1619+
let input = vec![vec![1000i64, 500], vec![750, 250], vec![900, 100]];
16341620
let result = merge.merge(input);
1635-
assert_eq!(result, vec![Reverse(1)]);
1621+
assert_eq!(result, vec![1000]);
16361622

1637-
// k larger than total unique elements
1623+
// k larger than total unique elements with u128
16381624
let merge = Merge { k: 100 };
1639-
let input = vec![
1640-
vec![Reverse(1), Reverse(3)],
1641-
vec![Reverse(2), Reverse(4)],
1642-
];
1625+
let input = vec![vec![10000u128, 5000], vec![8000, 3000]];
16431626
let result = merge.merge(input);
1644-
assert_eq!(
1645-
result,
1646-
vec![Reverse(1), Reverse(2), Reverse(3), Reverse(4)]
1647-
);
1627+
assert_eq!(result, vec![10000, 8000, 5000, 3000]);
16481628
}
16491629

16501630
#[test]
@@ -1685,26 +1665,65 @@ mod tests {
16851665
// Custom structs sorted by value (descending), then by id
16861666
let input = vec![
16871667
vec![
1688-
Score { value: 100, id: "a".to_string() },
1689-
Score { value: 80, id: "b".to_string() },
1690-
Score { value: 60, id: "c".to_string() },
1668+
Score {
1669+
value: 100,
1670+
id: "a".to_string(),
1671+
},
1672+
Score {
1673+
value: 80,
1674+
id: "b".to_string(),
1675+
},
1676+
Score {
1677+
value: 60,
1678+
id: "c".to_string(),
1679+
},
16911680
],
16921681
vec![
1693-
Score { value: 90, id: "d".to_string() },
1694-
Score { value: 70, id: "e".to_string() },
1682+
Score {
1683+
value: 90,
1684+
id: "d".to_string(),
1685+
},
1686+
Score {
1687+
value: 70,
1688+
id: "e".to_string(),
1689+
},
16951690
],
16961691
vec![
1697-
Score { value: 95, id: "f".to_string() },
1698-
Score { value: 85, id: "g".to_string() },
1692+
Score {
1693+
value: 95,
1694+
id: "f".to_string(),
1695+
},
1696+
Score {
1697+
value: 85,
1698+
id: "g".to_string(),
1699+
},
16991700
],
17001701
];
17011702

17021703
let result = merge.merge(input);
17031704

17041705
assert_eq!(result.len(), 3);
1705-
assert_eq!(result[0], Score { value: 100, id: "a".to_string() });
1706-
assert_eq!(result[1], Score { value: 95, id: "f".to_string() });
1707-
assert_eq!(result[2], Score { value: 90, id: "d".to_string() });
1706+
assert_eq!(
1707+
result[0],
1708+
Score {
1709+
value: 100,
1710+
id: "a".to_string()
1711+
}
1712+
);
1713+
assert_eq!(
1714+
result[1],
1715+
Score {
1716+
value: 95,
1717+
id: "f".to_string()
1718+
}
1719+
);
1720+
assert_eq!(
1721+
result[2],
1722+
Score {
1723+
value: 90,
1724+
id: "d".to_string()
1725+
}
1726+
);
17081727
}
17091728

17101729
#[test]
@@ -1726,8 +1745,14 @@ mod tests {
17261745
// Verify output maintains order - should be sorted by Reverse ordering
17271746
// which means ascending inner values
17281747
for i in 1..result.len() {
1729-
assert!(result[i - 1] >= result[i], "Output should be in descending Reverse order");
1730-
assert!(result[i - 1].0 <= result[i].0, "Inner values should be in ascending order");
1748+
assert!(
1749+
result[i - 1] >= result[i],
1750+
"Output should be in descending Reverse order"
1751+
);
1752+
assert!(
1753+
result[i - 1].0 <= result[i].0,
1754+
"Inner values should be in ascending order"
1755+
);
17311756
}
17321757

17331758
// Check we got the right elements
@@ -1750,34 +1775,45 @@ mod tests {
17501775

17511776
#[test]
17521777
fn test_merge_single_vector() {
1753-
use std::cmp::Reverse;
1754-
17551778
let merge = Merge { k: 3 };
17561779

1757-
// Single vector input
1758-
let input = vec![vec![Reverse(1), Reverse(2), Reverse(3), Reverse(4), Reverse(5)]];
1780+
// Single vector input with u64
1781+
let input = vec![vec![1000u64, 800, 600, 400, 200]];
17591782

17601783
let result = merge.merge(input);
17611784

1762-
assert_eq!(result, vec![Reverse(1), Reverse(2), Reverse(3)]);
1785+
assert_eq!(result, vec![1000, 800, 600]);
17631786
}
17641787

17651788
#[test]
17661789
fn test_merge_all_same_values() {
1767-
use std::cmp::Reverse;
1768-
17691790
let merge = Merge { k: 5 };
17701791

1771-
// All vectors contain the same value
1772-
let input = vec![
1773-
vec![Reverse(42), Reverse(42), Reverse(42)],
1774-
vec![Reverse(42), Reverse(42)],
1775-
vec![Reverse(42), Reverse(42), Reverse(42), Reverse(42)],
1776-
];
1792+
// All vectors contain the same value (using i16)
1793+
let input = vec![vec![42i16, 42, 42], vec![42, 42], vec![42, 42, 42, 42]];
17771794

17781795
let result = merge.merge(input);
17791796

17801797
// Should deduplicate to single value
1781-
assert_eq!(result, vec![Reverse(42)]);
1798+
assert_eq!(result, vec![42]);
1799+
}
1800+
1801+
#[test]
1802+
fn test_merge_mixed_types_sizes() {
1803+
// Test with usize (common in real usage)
1804+
let merge = Merge { k: 4 };
1805+
let input = vec![
1806+
vec![1000usize, 500, 100],
1807+
vec![800, 300],
1808+
vec![900, 600, 200],
1809+
];
1810+
let result = merge.merge(input);
1811+
assert_eq!(result, vec![1000, 900, 800, 600]);
1812+
1813+
// Test with negative integers (i32)
1814+
let merge = Merge { k: 5 };
1815+
let input = vec![vec![10i32, 0, -10, -20], vec![5, -5, -15], vec![15, -25]];
1816+
let result = merge.merge(input);
1817+
assert_eq!(result, vec![15, 10, 5, 0, -5]);
17821818
}
17831819
}

0 commit comments

Comments
 (0)