]> git.lizzy.rs Git - rust.git/commitdiff
Add a test verifying the number of drop calls
authorJörn Horstmann <git@jhorstmann.net>
Fri, 25 Mar 2022 12:00:49 +0000 (13:00 +0100)
committerJörn Horstmann <git@jhorstmann.net>
Fri, 25 Mar 2022 12:28:19 +0000 (13:28 +0100)
library/alloc/tests/vec.rs

index ca0fcc855c7b8d03e7ab110e10214cd7e3e5d20b..ab2414a6dc0b434928f177ec0cc33247ecffd1b6 100644 (file)
@@ -1,3 +1,6 @@
+use core::alloc::{Allocator, Layout};
+use core::ptr::NonNull;
+use std::alloc::System;
 use std::assert_matches::assert_matches;
 use std::borrow::Cow;
 use std::cell::Cell;
@@ -991,6 +994,27 @@ fn test_into_iter_advance_by() {
     assert_eq!(i.len(), 0);
 }
 
+#[test]
+fn test_into_iter_drop_allocator() {
+    struct ReferenceCountedAllocator<'a>(DropCounter<'a>);
+
+    unsafe impl Allocator for ReferenceCountedAllocator<'_> {
+        fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, core::alloc::AllocError> {
+            System.allocate(layout)
+        }
+
+        unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
+            System.deallocate(ptr, layout)
+        }
+    }
+
+    let mut drop_count = 0;
+    let allocator = ReferenceCountedAllocator(DropCounter { count: &mut drop_count });
+    let _ = Vec::<u32, _>::new_in(allocator).into_iter();
+
+    assert_eq!(drop_count, 1);
+}
+
 #[test]
 fn test_from_iter_specialization() {
     let src: Vec<usize> = vec![0usize; 1];