@@ -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