forked from M-Labs/libfringe
Rewrite the FPE test to not use Context directly
This commit is contained in:
parent
890e95b8a4
commit
375846bda5
26
tests/fpe.rs
26
tests/fpe.rs
|
@ -8,12 +8,9 @@
|
|||
#![feature(asm)]
|
||||
extern crate fringe;
|
||||
extern crate test;
|
||||
use fringe::Context;
|
||||
use fringe::{OsStack, Generator};
|
||||
use test::black_box;
|
||||
|
||||
#[thread_local]
|
||||
static mut ctx_slot: *mut Context<fringe::OsStack> = 0 as *mut Context<_>;
|
||||
|
||||
const FE_DIVBYZERO: i32 = 0x4;
|
||||
extern {
|
||||
fn feenableexcept(except: i32) -> i32;
|
||||
|
@ -22,20 +19,11 @@ extern {
|
|||
#[test]
|
||||
#[ignore]
|
||||
fn fpe() {
|
||||
unsafe extern "C" fn universe_destroyer(_arg: usize) -> ! {
|
||||
loop {
|
||||
println!("{:?}", 1.0/black_box(0.0));
|
||||
Context::swap(ctx_slot, ctx_slot, 0);
|
||||
}
|
||||
}
|
||||
let stack = OsStack::new(0).unwrap();
|
||||
let mut gen = Generator::new(stack, move |yielder| {
|
||||
yielder.generate(1.0 / black_box(0.0));
|
||||
});
|
||||
|
||||
unsafe {
|
||||
let stack = fringe::OsStack::new(4 << 20).unwrap();
|
||||
let mut ctx = Context::new(stack, universe_destroyer);
|
||||
ctx_slot = &mut ctx;
|
||||
|
||||
Context::swap(ctx_slot, ctx_slot, 0);
|
||||
feenableexcept(FE_DIVBYZERO);
|
||||
Context::swap(ctx_slot, ctx_slot, 0);
|
||||
}
|
||||
unsafe { feenableexcept(FE_DIVBYZERO); }
|
||||
println!("{:?}", gen.next());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue