From 70069f2b4c17d3c8fa19278a6a9274e13533352c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tin=20=C5=A0vagelj?= Date: Fri, 22 Mar 2024 14:16:13 +0100 Subject: [PATCH] Fix doc tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update CI matrix to combine different features Signed-off-by: Tin Å vagelj --- .github/workflows/ci.yml | 71 ++++++++++++++++++++++++++++++---------- .vscode/settings.json | 3 ++ Cargo.toml | 19 ++++++----- src/lib.rs | 46 +++++++++++++------------- 4 files changed, 90 insertions(+), 49 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8dd4161..d0b75db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,26 +3,44 @@ name: ci on: pull_request: push: - branches: - - master env: CARGO_TERM_COLOR: always jobs: test: - runs-on: ubuntu-latest strategy: matrix: - include: - - rust: stable # stable, std - features: "" - - rust: stable # stable, no_std - features: --features no_std - - rust: nightly # nightly, std - features: --features ptr_metadata,allocator_api - - rust: nightly # nightly, no_std - features: --features ptr_metadata,error_in_core,allocator_api,no_std + os: [ubuntu-latest, windows-latest, macos-latest] + rust: ["stable", "nightly"] + no_std: [true, false] + debug: [true, false] + unsafe_impl: [true, false] + ptr_metadata: [true, false] + error_in_core: [true, false] + allocator_api: [true, false] + exclude: + - rust: stable + ptr_metadata: true + - rust: stable + error_in_core: true + - rust: stable + allocator_api: true + - rust: nightly + ptr_metadata: false + - rust: nightly + error_in_core: false + - rust: nightly + allocator_api: false + runs-on: ${{ matrix.os }} + name: | + test - ${{ matrix.os }}; ${{ matrix.rust }} rust; features: + no_std: ${{ matrix.no_std }}, + debug: ${{ matrix.debug }}, + unsafe_impl: ${{ matrix.unsafe_impl }}, + ptr_metadata: ${{ matrix.ptr_metadata }}, + error_in_core: ${{ matrix.error_in_core }}, + allocator_api: ${{ matrix.allocator_api }} env: RUST_BACKTRACE: 1 # Emit backtraces on panics. steps: @@ -32,10 +50,23 @@ jobs: toolchain: ${{ matrix.rust }} profile: minimal override: true - - run: cargo test ${{ matrix.features }} --verbose + - if: matrix.no_std == true + run: echo "FEATURES=$FEATURES,no_std" >> $GITHUB_ENV + - if: matrix.debug == true + run: echo "FEATURES=$FEATURES,debug" >> $GITHUB_ENV + - if: matrix.unsafe_impl == true + run: echo "FEATURES=$FEATURES,unsafe_impl" >> $GITHUB_ENV + - if: matrix.ptr_metadata == true + run: echo "FEATURES=$FEATURES,ptr_metadata" >> $GITHUB_ENV + - if: matrix.error_in_core == true + run: echo "FEATURES=$FEATURES,error_in_core" >> $GITHUB_ENV + - if: matrix.allocator_api == true + run: echo "FEATURES=$FEATURES,allocator_api" >> $GITHUB_ENV + - run: cargo test --no-default-features --features=${{ env.FEATURES }} --verbose lint: runs-on: ubuntu-latest + needs: test steps: - uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 @@ -48,11 +79,15 @@ jobs: miri: runs-on: ubuntu-latest + needs: test steps: - uses: actions/checkout@v3 - name: Install Miri - run: | - rustup toolchain install nightly --component miri - rustup override set nightly - cargo miri setup - - run: cargo miri test --all-features --verbose + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + profile: minimal + components: miri + override: true + - run: cargo miri setup + - run: cargo miri test --all-features --verbose --color=always diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3c02253 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "rust-analyzer.check.features": "all", +} diff --git a/Cargo.toml b/Cargo.toml index 903c643..ac934d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,20 +9,23 @@ keywords = ["memory", "contiguous", "storage", "container", "nostd"] categories = ["data-structures", "memory-management", "no-std"] repository = "https://github.com/Caellian/contiguous_mem" +[[example]] +name = "game_loading" +path = "examples/game_loading.rs" +required-features = ["unsafe_impl"] + [[example]] name = "ptr_metadata" path = "examples/ptr_metadata.rs" required-features = ["ptr_metadata"] +[[example]] +name = "unsafe_impl" +path = "examples/unsafe_impl.rs" +required-features = ["unsafe_impl"] + [features] -default = [ - "no_std", - "unsafe_impl", - "debug", - "ptr_metadata", - "error_in_core", - "allocator_api", -] +default = ["unsafe_impl", "debug"] no_std = [] # No-std support debug = [] # Enable debug attributes diff --git a/src/lib.rs b/src/lib.rs index a7f5fab..25d92db 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -67,7 +67,7 @@ impl> ContiguousMemory { /// # #![allow(unused_mut)] /// use contiguous_mem::ContiguousMemory; /// - /// let mut storage = ContiguousMemory::new(); + /// let mut storage: ContiguousMemory = ContiguousMemory::new(); /// ``` pub fn new() -> Self { Self { @@ -93,7 +93,7 @@ impl> ContiguousMemory { /// # #![allow(unused_mut)] /// use contiguous_mem::ContiguousMemory; /// - /// let mut storage = ContiguousMemory::with_capacity(1024); + /// let mut storage: ContiguousMemory = ContiguousMemory::with_capacity(1024); /// # assert_eq!(storage.capacity(), 1024); /// # assert_eq!(storage.align(), core::mem::align_of::()); /// ``` @@ -124,7 +124,7 @@ impl> ContiguousMemory { /// use core::alloc::Layout; /// use contiguous_mem::ContiguousMemory; /// - /// let mut storage = ContiguousMemory::with_layout( + /// let mut storage: ContiguousMemory = ContiguousMemory::with_layout( /// Layout::from_size_align(512, align_of::()).unwrap() /// ); /// # assert_eq!(storage.capacity(), 512); @@ -151,7 +151,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use contiguous_mem::ContiguousMemory; /// use contiguous_mem::memory::DefaultMemoryManager; /// - /// let mut storage = ContiguousMemory::with_alloc( + /// let mut storage: ContiguousMemory = ContiguousMemory::with_alloc( /// DefaultMemoryManager /// ); /// # assert_eq!(storage.capacity(), 0); @@ -181,7 +181,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use contiguous_mem::ContiguousMemory; /// use contiguous_mem::memory::DefaultMemoryManager; /// - /// let mut storage = ContiguousMemory::with_capacity_and_alloc( + /// let mut storage: ContiguousMemory = ContiguousMemory::with_capacity_and_alloc( /// 256, /// DefaultMemoryManager /// ); @@ -218,7 +218,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use contiguous_mem::ContiguousMemory; /// use contiguous_mem::memory::DefaultMemoryManager; /// - /// let mut storage = ContiguousMemory::with_layout_and_alloc( + /// let mut storage: ContiguousMemory = ContiguousMemory::with_layout_and_alloc( /// Layout::from_size_align(0, align_of::()).unwrap(), /// DefaultMemoryManager /// ); @@ -234,17 +234,17 @@ impl, A: ManageMemory> ContiguousMemory { } } - /// Returns the base address of the allocated memory. + /// Returns the [`MemoryBase`] of the container. /// /// # Examples /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); - /// assert_eq!(s.base(), None); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); + /// assert!(!s.base().is_allocated()); /// /// let r = s.push(6); - /// assert_eq!(s.base().is_some(), true); + /// assert!(s.base().is_allocated()); /// ``` pub fn base(&self) -> MemoryBase { *ReadableInner::read(&self.inner.base).expect("can't read base") @@ -258,7 +258,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use core::ptr::null; /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// assert_eq!(s.base_ptr(), null()); /// /// let r = s.push(3); @@ -279,7 +279,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// assert_eq!(s.capacity(), 0); /// /// let r1 = s.push(1u8); @@ -305,7 +305,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// assert_eq!(s.size(), 0); /// /// let r1 = s.push(1u8); @@ -335,7 +335,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use core::mem::align_of; /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// assert_eq!(s.align(), align_of::()); /// ``` #[inline] @@ -351,7 +351,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use core::mem::align_of; /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// assert_eq!( /// s.layout(), /// Layout::from_size_align(0, align_of::()).unwrap() @@ -373,7 +373,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// assert_eq!(s.can_push_t::(), false); /// /// let r1 = s.push(1u32); @@ -398,7 +398,7 @@ impl, A: ManageMemory> ContiguousMemory { /// use core::alloc::Layout; /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// /// let r1 = s.push([0u32; 4]); /// @@ -430,7 +430,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::with_capacity(4); + /// let mut s: ContiguousMemory = ContiguousMemory::with_capacity(4); /// assert_eq!(s.capacity(), 4); /// assert_eq!(s.size(), 0); /// @@ -462,7 +462,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// /// assert!(s.try_grow_to(1024).is_ok()); /// @@ -620,7 +620,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::with_capacity(4); + /// let mut s: ContiguousMemory = ContiguousMemory::with_capacity(4); /// assert_eq!(s.capacity(), 4); /// /// let r = s.push(1u32); @@ -657,7 +657,7 @@ impl, A: ManageMemory> ContiguousMemory { /// ``` /// use contiguous_mem::ContiguousMemory; /// - /// let mut s = ContiguousMemory::new(); + /// let mut s: ContiguousMemory = ContiguousMemory::new(); /// /// assert!(s.try_reserve_exact(1024).is_ok()); /// assert_eq!(s.capacity(), 1024); @@ -879,13 +879,13 @@ impl, A: ManageMemory> ContiguousMemory { /// # use contiguous_mem::memory::DefaultMemoryManager; /// # use core::alloc::Layout; /// # use core::mem; - /// # let mut storage = ContiguousMemory::new(); + /// # let mut storage: ContiguousMemory = ContiguousMemory::new(); /// let value = vec!["ignore", "drop", "for", "me"]; /// let erased = &value as *const Vec<&str> as *const (); /// let layout = Layout::new::>(); /// /// // Reference type arguments must be fully specified. - /// let stored: CERef, DefaultMemoryManager> = unsafe { + /// let stored: EntryRef, DefaultMemoryManager> = unsafe { /// mem::transmute(storage.push_raw(erased, layout)) /// }; /// ```