// Copyright 2018 the Kurbo Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT

//! Benchmarks of cubic arclength approaches.

#![cfg(nightly)]
#![feature(test)]
extern crate test;
use test::Bencher;

use kurbo::{CubicBez, ParamCurveArclen};

#[bench]
fn bench_cubic_arclen_1e_4(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (1.0 / 3.0, 0.0), (2.0 / 3.0, 1.0), (1.0, 1.0));
    b.iter(|| test::black_box(c).arclen(1e-4))
}

#[bench]
fn bench_cubic_arclen_1e_5(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (1.0 / 3.0, 0.0), (2.0 / 3.0, 1.0), (1.0, 1.0));
    b.iter(|| test::black_box(c).arclen(1e-5))
}

#[bench]
fn bench_cubic_arclen_1e_6(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (1.0 / 3.0, 0.0), (2.0 / 3.0, 1.0), (1.0, 1.0));
    b.iter(|| test::black_box(c).arclen(1e-6))
}

#[bench]
fn bench_cubic_arclen_degenerate(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0));
    b.iter(|| test::black_box(c).arclen(1e-6))
}

#[bench]
fn bench_cubic_arclen_1e_7(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (1.0 / 3.0, 0.0), (2.0 / 3.0, 1.0), (1.0, 1.0));
    b.iter(|| test::black_box(c).arclen(1e-7))
}

#[bench]
fn bench_cubic_arclen_1e_8(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (1.0 / 3.0, 0.0), (2.0 / 3.0, 1.0), (1.0, 1.0));
    b.iter(|| test::black_box(c).arclen(1e-8))
}

#[bench]
fn bench_cubic_arclen_1e_9(b: &mut Bencher) {
    let c = CubicBez::new((0.0, 0.0), (1.0 / 3.0, 0.0), (2.0 / 3.0, 1.0), (1.0, 1.0));
    b.iter(|| test::black_box(c).arclen(1e-9))
}
