vips 0.2.0

Rust bindings for libvips: fast, low-memory image processing with a safe, ergonomic API.
Documentation
use std::sync::{Arc, Barrier};

#[test]
fn both_crates_share_one_initialization_lock() {
    let barrier = Arc::new(Barrier::new(17));
    let callers: Vec<_> = (0..16)
        .map(|i| {
            let barrier = Arc::clone(&barrier);
            std::thread::spawn(move || {
                barrier.wait();
                if i % 2 == 0 {
                    vips::init(Some("high-level")).unwrap();
                } else {
                    vips_sys::helpers::init("low-level").unwrap();
                }
            })
        })
        .collect();
    barrier.wait();
    for caller in callers {
        caller.join().unwrap();
    }
    assert!(vips::is_initialized());
    assert_eq!(vips::black(2, 2).unwrap().avg().unwrap(), 0.0);
}