cl-arena: Add arena allocator implementation based HEAVILY on rustc-arena
It seems to pass the most basic of tests in miri (shame it needs the unstable `strict_provenance` feature to do so, but eh.)
This commit is contained in:
61
compiler/cl-arena/src/typed_arena/tests.rs
Normal file
61
compiler/cl-arena/src/typed_arena/tests.rs
Normal file
@@ -0,0 +1,61 @@
|
||||
use super::TypedArena;
|
||||
extern crate std;
|
||||
use std::{prelude::rust_2021::*, print, vec};
|
||||
#[test]
|
||||
fn pushing_to_arena() {
|
||||
let arena = TypedArena::new();
|
||||
let foo = arena.alloc("foo");
|
||||
let bar = arena.alloc("bar");
|
||||
let baz = arena.alloc("baz");
|
||||
|
||||
assert_eq!("foo", *foo);
|
||||
assert_eq!("bar", *bar);
|
||||
assert_eq!("baz", *baz);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pushing_vecs_to_arena() {
|
||||
let arena = TypedArena::new();
|
||||
|
||||
let foo = arena.alloc(vec!["foo"]);
|
||||
let bar = arena.alloc(vec!["bar"]);
|
||||
let baz = arena.alloc(vec!["baz"]);
|
||||
|
||||
assert_eq!("foo", foo[0]);
|
||||
assert_eq!("bar", bar[0]);
|
||||
assert_eq!("baz", baz[0]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pushing_zsts() {
|
||||
struct ZeroSized;
|
||||
impl Drop for ZeroSized {
|
||||
fn drop(&mut self) {
|
||||
print!("")
|
||||
}
|
||||
}
|
||||
|
||||
let arena = TypedArena::new();
|
||||
|
||||
for _ in 0..0x100 {
|
||||
arena.alloc(ZeroSized);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pushing_nodrop_zsts() {
|
||||
struct ZeroSized;
|
||||
let arena = TypedArena::new();
|
||||
|
||||
for _ in 0..0x1000 {
|
||||
arena.alloc(ZeroSized);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn resize() {
|
||||
let arena = TypedArena::new();
|
||||
|
||||
for _ in 0..0x780 {
|
||||
arena.alloc(0u128);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user