Moving tests into their own module in each file
This is a common pattern and it limits the scope of entities made only
for testing purposes.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I4338a5f68471377b87653240fbb0debf3d80e924
diff --git a/src/region_pool.rs b/src/region_pool.rs
index f6fa3b4..df5a026 100644
--- a/src/region_pool.rs
+++ b/src/region_pool.rs
@@ -185,232 +185,234 @@
}
#[cfg(test)]
-#[derive(Debug, PartialEq, Eq)]
-struct RegionExample {
- base: usize,
- length: usize,
- used: bool,
-}
+mod tests {
+ use super::*;
-#[cfg(test)]
-impl RegionExample {
- fn new(base: usize, length: usize, used: bool) -> Self {
- Self { base, length, used }
- }
-}
-
-#[cfg(test)]
-impl Region for RegionExample {
- type Resource = ();
-
- fn base(&self) -> usize {
- self.base
- }
-
- fn length(&self) -> usize {
- self.length
- }
-
- fn used(&self) -> bool {
- self.used
- }
-
- fn contains(&self, base: usize, length: usize) -> bool {
- self.base <= base && base + length <= self.base + self.length
- }
-
- fn try_append(&mut self, other: &Self) -> bool {
- if self.used == other.used && self.base + self.length == other.base {
- self.length += other.length;
- true
- } else {
- false
- }
- }
-
- fn create_split(
- &self,
+ #[derive(Debug, PartialEq, Eq)]
+ struct RegionExample {
base: usize,
length: usize,
- resource: Option<Self::Resource>,
- ) -> (Self, Vec<Self>) {
- let mut res = Vec::new();
- if self.base != base {
- res.push(RegionExample::new(self.base, base - self.base, self.used));
- }
- res.push(RegionExample::new(base, length, resource.is_some()));
- if self.base + self.length != base + length {
- res.push(RegionExample::new(
- base + length,
- (self.base + self.length) - (base + length),
- self.used,
- ));
- }
-
- (RegionExample::new(base, length, resource.is_some()), res)
+ used: bool,
}
-}
-#[test]
-fn test_region_contains() {
- let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ impl RegionExample {
+ fn new(base: usize, length: usize, used: bool) -> Self {
+ Self { base, length, used }
+ }
+ }
- assert!(region.contains(0x4000_0000, 0x1000_0000));
- assert!(!region.contains(0x4000_0000 - 1, 0x1000_0000 + 1));
- assert!(!region.contains(0x4000_0000, 0x1000_0000 + 1));
- assert!(region.contains(0x4000_0000 + 1, 0x1000_0000 - 1));
-}
+ impl Region for RegionExample {
+ type Resource = ();
-#[test]
-fn test_region_try_append() {
- // Normal append
- let mut region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
- let appending = RegionExample::new(0x5000_0000, 0x0000_1000, false);
+ fn base(&self) -> usize {
+ self.base
+ }
- assert!(region.try_append(&appending));
- assert_eq!(RegionExample::new(0x4000_0000, 0x1000_1000, false), region);
+ fn length(&self) -> usize {
+ self.length
+ }
- // Different used flags
- let mut region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
- let appending = RegionExample::new(0x5000_0000, 0x0000_1000, true);
+ fn used(&self) -> bool {
+ self.used
+ }
- assert!(!region.try_append(&appending));
- assert_eq!(RegionExample::new(0x4000_0000, 0x1000_0000, false), region);
+ fn contains(&self, base: usize, length: usize) -> bool {
+ self.base <= base && base + length <= self.base + self.length
+ }
- // Not continious
- let mut region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
- let appending = RegionExample::new(0x5000_1000, 0x0000_1000, false);
+ fn try_append(&mut self, other: &Self) -> bool {
+ if self.used == other.used && self.base + self.length == other.base {
+ self.length += other.length;
+ true
+ } else {
+ false
+ }
+ }
- assert!(!region.try_append(&appending));
- assert_eq!(RegionExample::new(0x4000_0000, 0x1000_0000, false), region);
-}
+ fn create_split(
+ &self,
+ base: usize,
+ length: usize,
+ resource: Option<Self::Resource>,
+ ) -> (Self, Vec<Self>) {
+ let mut res = Vec::new();
+ if self.base != base {
+ res.push(RegionExample::new(self.base, base - self.base, self.used));
+ }
+ res.push(RegionExample::new(base, length, resource.is_some()));
+ if self.base + self.length != base + length {
+ res.push(RegionExample::new(
+ base + length,
+ (self.base + self.length) - (base + length),
+ self.used,
+ ));
+ }
-#[test]
-fn test_region_create_split() {
- // Cut first part
- let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ (RegionExample::new(base, length, resource.is_some()), res)
+ }
+ }
- let res = region.create_split(0x4000_0000, 0x0000_1000, Some(())).1;
- assert_eq!(RegionExample::new(0x4000_0000, 0x0000_1000, true), res[0]);
- assert_eq!(RegionExample::new(0x4000_1000, 0x0fff_f000, false), res[1]);
+ #[test]
+ fn test_region_contains() {
+ let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
- // Cut last part
- let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ assert!(region.contains(0x4000_0000, 0x1000_0000));
+ assert!(!region.contains(0x4000_0000 - 1, 0x1000_0000 + 1));
+ assert!(!region.contains(0x4000_0000, 0x1000_0000 + 1));
+ assert!(region.contains(0x4000_0000 + 1, 0x1000_0000 - 1));
+ }
- let res = region.create_split(0x4fff_f000, 0x0000_1000, Some(())).1;
- assert_eq!(RegionExample::new(0x4000_0000, 0x0fff_f000, false), res[0]);
- assert_eq!(RegionExample::new(0x4fff_f000, 0x0000_1000, true), res[1]);
+ #[test]
+ fn test_region_try_append() {
+ // Normal append
+ let mut region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ let appending = RegionExample::new(0x5000_0000, 0x0000_1000, false);
- // Cut middle part
- let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ assert!(region.try_append(&appending));
+ assert_eq!(RegionExample::new(0x4000_0000, 0x1000_1000, false), region);
- let res = region.create_split(0x4020_0000, 0x0000_1000, Some(())).1;
- assert_eq!(RegionExample::new(0x4000_0000, 0x0020_0000, false), res[0]);
- assert_eq!(RegionExample::new(0x4020_0000, 0x0000_1000, true), res[1]);
- assert_eq!(RegionExample::new(0x4020_1000, 0x0fdf_f000, false), res[2]);
-}
+ // Different used flags
+ let mut region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ let appending = RegionExample::new(0x5000_0000, 0x0000_1000, true);
-#[test]
-fn test_region_pool_add() {
- let mut pool = RegionPool::new();
- assert_eq!(
- Ok(()),
+ assert!(!region.try_append(&appending));
+ assert_eq!(RegionExample::new(0x4000_0000, 0x1000_0000, false), region);
+
+ // Not continious
+ let mut region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+ let appending = RegionExample::new(0x5000_1000, 0x0000_1000, false);
+
+ assert!(!region.try_append(&appending));
+ assert_eq!(RegionExample::new(0x4000_0000, 0x1000_0000, false), region);
+ }
+
+ #[test]
+ fn test_region_create_split() {
+ // Cut first part
+ let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+
+ let res = region.create_split(0x4000_0000, 0x0000_1000, Some(())).1;
+ assert_eq!(RegionExample::new(0x4000_0000, 0x0000_1000, true), res[0]);
+ assert_eq!(RegionExample::new(0x4000_1000, 0x0fff_f000, false), res[1]);
+
+ // Cut last part
+ let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+
+ let res = region.create_split(0x4fff_f000, 0x0000_1000, Some(())).1;
+ assert_eq!(RegionExample::new(0x4000_0000, 0x0fff_f000, false), res[0]);
+ assert_eq!(RegionExample::new(0x4fff_f000, 0x0000_1000, true), res[1]);
+
+ // Cut middle part
+ let region = RegionExample::new(0x4000_0000, 0x1000_0000, false);
+
+ let res = region.create_split(0x4020_0000, 0x0000_1000, Some(())).1;
+ assert_eq!(RegionExample::new(0x4000_0000, 0x0020_0000, false), res[0]);
+ assert_eq!(RegionExample::new(0x4020_0000, 0x0000_1000, true), res[1]);
+ assert_eq!(RegionExample::new(0x4020_1000, 0x0fdf_f000, false), res[2]);
+ }
+
+ #[test]
+ fn test_region_pool_add() {
+ let mut pool = RegionPool::new();
+ assert_eq!(
+ Ok(()),
+ pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
+ );
+ assert_eq!(
+ Ok(()),
+ pool.add(RegionExample::new(0x5000_0000, 0x1000_0000, false))
+ );
+ assert_eq!(
+ Err(RegionPoolError::AlreadyUsed),
+ pool.add(RegionExample::new(0x4000_1000, 0x1000, false))
+ );
+ }
+
+ #[test]
+ fn test_pool_allocate() {
+ let mut pool = RegionPool::new();
pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
- );
- assert_eq!(
- Ok(()),
- pool.add(RegionExample::new(0x5000_0000, 0x1000_0000, false))
- );
- assert_eq!(
- Err(RegionPoolError::AlreadyUsed),
- pool.add(RegionExample::new(0x4000_1000, 0x1000, false))
- );
-}
+ .unwrap();
-#[test]
-fn test_pool_allocate() {
- let mut pool = RegionPool::new();
- pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
- .unwrap();
+ let res = pool.allocate(0x1000, ());
+ assert_eq!(Ok(RegionExample::new(0x4000_0000, 0x1000, true)), res);
+ let res = pool.allocate(0x1_0000, ());
+ assert_eq!(Ok(RegionExample::new(0x4000_1000, 0x1_0000, true)), res);
+ let res = pool.allocate(0x2000_0000, ());
+ assert_eq!(Err(RegionPoolError::NoSpace), res);
+ }
- let res = pool.allocate(0x1000, ());
- assert_eq!(Ok(RegionExample::new(0x4000_0000, 0x1000, true)), res);
- let res = pool.allocate(0x1_0000, ());
- assert_eq!(Ok(RegionExample::new(0x4000_1000, 0x1_0000, true)), res);
- let res = pool.allocate(0x2000_0000, ());
- assert_eq!(Err(RegionPoolError::NoSpace), res);
-}
+ #[test]
+ fn test_region_pool_acquire() {
+ let mut pool = RegionPool::new();
+ pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
+ .unwrap();
-#[test]
-fn test_region_pool_acquire() {
- let mut pool = RegionPool::new();
- pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
- .unwrap();
+ let res = pool.acquire(0x4000_1000, 0x1000, ());
+ assert_eq!(Ok(RegionExample::new(0x4000_1000, 0x1000, true)), res);
+ let res = pool.allocate(0x1_0000, ());
+ assert_eq!(Ok(RegionExample::new(0x4000_2000, 0x10000, true)), res);
+ let res = pool.acquire(0x4000_1000, 0x1000, ());
+ assert_eq!(Err(RegionPoolError::AlreadyUsed), res);
+ }
- let res = pool.acquire(0x4000_1000, 0x1000, ());
- assert_eq!(Ok(RegionExample::new(0x4000_1000, 0x1000, true)), res);
- let res = pool.allocate(0x1_0000, ());
- assert_eq!(Ok(RegionExample::new(0x4000_2000, 0x10000, true)), res);
- let res = pool.acquire(0x4000_1000, 0x1000, ());
- assert_eq!(Err(RegionPoolError::AlreadyUsed), res);
-}
+ #[test]
+ fn test_region_pool_release() {
+ let mut pool = RegionPool::new();
+ pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
+ .unwrap();
-#[test]
-fn test_region_pool_release() {
- let mut pool = RegionPool::new();
- pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
- .unwrap();
+ let res = pool.allocate(0x1000, ());
+ assert_eq!(Ok(RegionExample::new(0x4000_0000, 0x1000, true)), res);
+ assert_eq!(Ok(()), pool.release(res.unwrap()));
- let res = pool.allocate(0x1000, ());
- assert_eq!(Ok(RegionExample::new(0x4000_0000, 0x1000, true)), res);
- assert_eq!(Ok(()), pool.release(res.unwrap()));
+ let res = pool.allocate(0x1_0000, ());
+ assert_eq!(Ok(RegionExample::new(0x4000_0000, 0x10000, true)), res);
+ assert_eq!(Ok(()), pool.release(res.unwrap()));
- let res = pool.allocate(0x1_0000, ());
- assert_eq!(Ok(RegionExample::new(0x4000_0000, 0x10000, true)), res);
- assert_eq!(Ok(()), pool.release(res.unwrap()));
+ assert_eq!(
+ Err(RegionPoolError::NotFound),
+ pool.release(RegionExample::new(0x4000_0000, 0x1000, true))
+ );
+ }
- assert_eq!(
- Err(RegionPoolError::NotFound),
- pool.release(RegionExample::new(0x4000_0000, 0x1000, true))
- );
-}
+ #[test]
+ #[should_panic]
+ fn test_region_pool_release_not_used() {
+ let mut pool = RegionPool::new();
+ pool.release(RegionExample::new(0x4000_0000, 0x1000, false))
+ .unwrap();
+ }
-#[test]
-#[should_panic]
-fn test_region_pool_release_not_used() {
- let mut pool = RegionPool::new();
- pool.release(RegionExample::new(0x4000_0000, 0x1000, false))
- .unwrap();
-}
+ #[test]
+ fn test_region_pool_find_containing_region() {
+ let mut pool = RegionPool::<RegionExample>::new();
+ pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
+ .unwrap();
-#[test]
-fn test_region_pool_find_containing_region() {
- let mut pool = RegionPool::<RegionExample>::new();
- pool.add(RegionExample::new(0x4000_0000, 0x1000_0000, false))
- .unwrap();
+ assert_eq!(
+ Err(RegionPoolError::NotFound),
+ pool.find_containing_region(0x0000_0000, 0x1000)
+ );
- assert_eq!(
- Err(RegionPoolError::NotFound),
- pool.find_containing_region(0x0000_0000, 0x1000)
- );
+ assert_eq!(
+ Err(RegionPoolError::NotFound),
+ pool.find_containing_region(0x5000_0000, 0x1000)
+ );
- assert_eq!(
- Err(RegionPoolError::NotFound),
- pool.find_containing_region(0x5000_0000, 0x1000)
- );
+ assert_eq!(
+ Err(RegionPoolError::NotFound),
+ pool.find_containing_region(0x4000_0000, 0x2000_0000)
+ );
- assert_eq!(
- Err(RegionPoolError::NotFound),
- pool.find_containing_region(0x4000_0000, 0x2000_0000)
- );
+ assert_eq!(
+ Ok(&RegionExample::new(0x4000_0000, 0x1000_0000, false)),
+ pool.find_containing_region(0x4000_0000, 0x1000_0000)
+ );
- assert_eq!(
- Ok(&RegionExample::new(0x4000_0000, 0x1000_0000, false)),
- pool.find_containing_region(0x4000_0000, 0x1000_0000)
- );
-
- assert_eq!(
- Ok(&RegionExample::new(0x4000_0000, 0x1000_0000, false)),
- pool.find_containing_region(0x4000_1000, 0x1000)
- );
+ assert_eq!(
+ Ok(&RegionExample::new(0x4000_0000, 0x1000_0000, false)),
+ pool.find_containing_region(0x4000_1000, 0x1000)
+ );
+ }
}