//@ run-pass

//@ aux-build:custom.rs
//@ aux-build:helper.rs
//@ no-prefer-dynamic

#![feature(allocator_api)]
#![feature(slice_ptr_get)]

extern crate custom;
extern crate helper;

use std::alloc::{Allocator, Global, Layout, System};
use std::sync::atomic::{AtomicUsize, Ordering};

#[global_allocator]
static GLOBAL: custom::A = custom::A(AtomicUsize::new(0));

fn main() {
    unsafe {
        let n = GLOBAL.0.load(Ordering::SeqCst);
        let layout = Layout::from_size_align(4, 2).unwrap();

        let memory = Global.allocate(layout.clone()).unwrap();
        helper::work_with(&memory);
        assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 1);
        Global.deallocate(memory.as_non_null_ptr(), layout);
        assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 2);

        let memory = System.allocate(layout.clone()).unwrap();
        assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 2);
        helper::work_with(&memory);
        System.deallocate(memory.as_non_null_ptr(), layout);
        assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 2);
    }
}
