Rewrite the FPE test to not use Context directly

pull/1/head
edef 2016-08-09 15:59:35 +02:00
parent 890e95b8a4
commit 375846bda5
1 changed files with 7 additions and 19 deletions

View File

@ -8,12 +8,9 @@
#![feature(asm)] #![feature(asm)]
extern crate fringe; extern crate fringe;
extern crate test; extern crate test;
use fringe::Context; use fringe::{OsStack, Generator};
use test::black_box; use test::black_box;
#[thread_local]
static mut ctx_slot: *mut Context<fringe::OsStack> = 0 as *mut Context<_>;
const FE_DIVBYZERO: i32 = 0x4; const FE_DIVBYZERO: i32 = 0x4;
extern { extern {
fn feenableexcept(except: i32) -> i32; fn feenableexcept(except: i32) -> i32;
@ -22,20 +19,11 @@ extern {
#[test] #[test]
#[ignore] #[ignore]
fn fpe() { fn fpe() {
unsafe extern "C" fn universe_destroyer(_arg: usize) -> ! { let stack = OsStack::new(0).unwrap();
loop { let mut gen = Generator::new(stack, move |yielder| {
println!("{:?}", 1.0/black_box(0.0)); yielder.generate(1.0 / black_box(0.0));
Context::swap(ctx_slot, ctx_slot, 0); });
}
}
unsafe { unsafe { feenableexcept(FE_DIVBYZERO); }
let stack = fringe::OsStack::new(4 << 20).unwrap(); println!("{:?}", gen.next());
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);
}
} }