use codspeed_criterion_compat::{criterion_group, criterion_main, Criterion};
use oxilangtag::LanguageTag;

fn bench_language_tag_parse(c: &mut Criterion) {
    let examples = [
        "fr",
        "fr-Latn",
        "fr-fra",
        "fr-Latn-FR",
        "fr-Latn-419",
        "fr-FR",
        "ax-TZ",
        "fr-shadok",
        "fr-y-myext-myext2",
        "fra-Latn",
        "fra",
        "fra-FX",
        "i-klingon",
        "I-kLINgon",
        "no-bok",
        "fr-Lat",
        "mn-Cyrl-MN",
        "mN-cYrL-Mn",
        "fr-Latn-CA",
        "en-US",
        "fr-Latn-CA",
        "i-enochian",
        "x-fr-CH",
        "sr-Latn-CS",
        "es-419",
        "sl-nedis",
        "de-CH-1996",
        "de-Latg-1996",
        "sl-IT-nedis",
        "en-a-bbb-x-a-ccc",
        "de-a-value",
        "en-Latn-GB-boont-r-extended-sequence-x-private",
        "en-x-US",
        "az-Arab-x-AZE-derbend",
        "es-Latn-CO-x-private",
        "en-US-boont",
        "ab-x-abc-x-abc",
        "ab-x-abc-a-a",
        "i-default",
        "i-klingon",
        "abcd-Latn",
        "AaBbCcDd-x-y-any-x",
        "en",
        "de-AT",
        "es-419",
        "de-CH-1901",
        "sr-Cyrl",
        "sr-Cyrl-CS",
        "sl-Latn-IT-rozaj",
        "en-US-x-twain",
        "zh-cmn",
        "zh-cmn-Hant",
        "zh-cmn-Hant-HK",
        "zh-gan",
        "zh-yue-Hant-HK",
        "xr-lxs-qut",
        "xr-lqt-qu",
        "xr-p-lze",
    ];

    c.bench_function("language tag parse tests", |b| {
        b.iter(|| {
            for tag in examples.iter() {
                LanguageTag::parse(*tag).unwrap();
            }
        })
    });
}

criterion_group!(language_tag, bench_language_tag_parse);

criterion_main!(language_tag);
