@@ -16,6 +16,7 @@ use std::ops::Deref;
1616use std:: { u16, u32, u64} ;
1717
1818/// Enumeration describing a device's resource constraints.
19+ #[ derive( Copy , Clone , Debug , PartialEq ) ]
1920pub enum ResourceConstraint {
2021 /// Constraint for an IO Port address range.
2122 PioAddress {
@@ -109,7 +110,7 @@ impl ResourceConstraint {
109110}
110111
111112/// Type of Message Singaled Interrupt
112- #[ derive( Copy , Clone , PartialEq ) ]
113+ #[ derive( Copy , Clone , Debug , PartialEq ) ]
113114pub enum MsiIrqType {
114115 /// PCI MSI IRQ numbers.
115116 PciMsi ,
@@ -121,7 +122,7 @@ pub enum MsiIrqType {
121122
122123/// Enumeration for device resources.
123124#[ allow( missing_docs) ]
124- #[ derive( Clone ) ]
125+ #[ derive( Clone , Debug , PartialEq ) ]
125126pub enum Resource {
126127 /// IO Port address range.
127128 PioAddressRange { base : u16 , size : u16 } ,
@@ -142,7 +143,7 @@ pub enum Resource {
142143}
143144
144145/// Newtype to store a set of device resources.
145- #[ derive( Default , Clone ) ]
146+ #[ derive( Clone , Debug , Default ) ]
146147pub struct DeviceResources ( Vec < Resource > ) ;
147148
148149impl DeviceResources {
@@ -278,12 +279,16 @@ mod tests {
278279 size : PIO_ADDRESS_SIZE ,
279280 } ;
280281 let mut resource = DeviceResources :: new ( ) ;
281- resource. append ( entry) ;
282+ resource. append ( entry. clone ( ) ) ;
283+ assert_eq ! ( entry, resource[ 0 ] ) ;
284+
282285 let entry = Resource :: MmioAddressRange {
283286 base : MMIO_ADDRESS_BASE ,
284287 size : MMIO_ADDRESS_SIZE ,
285288 } ;
286- resource. append ( entry) ;
289+ resource. append ( entry. clone ( ) ) ;
290+ assert_eq ! ( entry, resource[ 1 ] ) ;
291+
287292 let entry = Resource :: LegacyIrq ( LEGACY_IRQ ) ;
288293 resource. append ( entry) ;
289294 let entry = Resource :: MsiIrq {
@@ -319,6 +324,25 @@ mod tests {
319324 resources. get_pio_address_ranges( ) [ 0 ] . 0 == PIO_ADDRESS_BASE
320325 && resources. get_pio_address_ranges( ) [ 0 ] . 1 == PIO_ADDRESS_SIZE
321326 ) ;
327+ assert_eq ! (
328+ resources[ 0 ] ,
329+ Resource :: PioAddressRange {
330+ base: PIO_ADDRESS_BASE ,
331+ size: PIO_ADDRESS_SIZE ,
332+ }
333+ ) ;
334+ assert_ne ! ( resources[ 0 ] , resources[ 1 ] ) ;
335+
336+ let resources2 = resources. clone ( ) ;
337+ assert_eq ! ( resources. len( ) , resources2. len( ) ) ;
338+ drop ( resources) ;
339+ assert_eq ! (
340+ resources2[ 0 ] ,
341+ Resource :: PioAddressRange {
342+ base: PIO_ADDRESS_BASE ,
343+ size: PIO_ADDRESS_SIZE ,
344+ }
345+ ) ;
322346 }
323347
324348 #[ test]
@@ -383,6 +407,13 @@ mod tests {
383407
384408 #[ test]
385409 fn test_resource_constraint ( ) {
410+ let pio = ResourceConstraint :: new_pio ( 2 ) ;
411+ let pio2 = pio. clone ( ) ;
412+ let mmio = ResourceConstraint :: new_mmio ( 0x1000 ) ;
413+ assert_eq ! ( pio, pio2) ;
414+ drop ( pio2) ;
415+ assert_ne ! ( pio, mmio) ;
416+
386417 if let ResourceConstraint :: PioAddress { range, align, size } =
387418 ResourceConstraint :: new_pio ( 2 )
388419 {
0 commit comments