// Copyright 2018 The proptest developers
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(never_type)]

use proptest::prelude::Arbitrary;
use proptest_derive::Arbitrary;

#[derive(Debug, Arbitrary)]
enum T1 {
    V1,
}

#[derive(Debug, Arbitrary)]
enum T2 {
    V1(), V2 {},
}

#[derive(Debug, Arbitrary)]
enum T3 {
    V1(), V2 {}, V3,
}

#[derive(Debug, Arbitrary)]
enum T4 {
    V1, V2(), V3, V4 {},
}

#[derive(Debug, Arbitrary)]
enum T5 {
    V1, V2, V3, V4 {}, V5(),
}

#[derive(Debug, Arbitrary)]
enum T6 {
    V1(), V2, V3 {}, V4, V5, V6,
}

#[derive(Debug, Arbitrary)]
enum T7 {
    V1, V2, V3, V4 {}, V5, V6, V7(),
}

#[derive(Debug, Arbitrary)]
enum T8 {
    V1, V2, V3(), V4, V5, V6{}, V7, V8,
}

#[derive(Debug, Arbitrary)]
enum T9 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9,
}

#[derive(Debug, Arbitrary)]
enum T10 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10,
}

#[derive(Debug, Arbitrary)]
enum T11 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11,
}

#[derive(Debug, Arbitrary)]
enum T12 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12,
}

#[derive(Debug, Arbitrary)]
enum T13 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13,
}

#[derive(Debug, Arbitrary)]
enum T14 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14,
}

#[derive(Debug, Arbitrary)]
enum T15 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
}

#[derive(Debug, Arbitrary)]
enum T16 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16,
}

#[derive(Debug, Arbitrary)]
enum T17 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17,
}

#[derive(Debug, Arbitrary)]
enum T18 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18,
}

#[derive(Debug, Arbitrary)]
enum T19 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19
}

#[derive(Debug, Arbitrary)]
enum T20 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19, V20
}

#[derive(Debug, Arbitrary)]
enum T21 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19, V20, V21,
}

#[derive(Debug, Arbitrary)]
enum T22 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19, V20, V21, V22,
}

#[derive(Debug, Arbitrary)]
enum T23 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19, V20, V21, V22, V23,
}

#[derive(Debug, Arbitrary)]
enum T24 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19, V20, V21, V22, V23, V24,
}

#[derive(Debug, Arbitrary)]
enum T25 {
    V1, V2, V3, V4, V5 {}, V6(), V7, V8, V9, V10, V11, V12, V13, V14, V15,
    V16, V17, V18, V19, V20, V21, V22, V23, V24, V25,
}

#[derive(Clone, Debug, Arbitrary)]
enum Alan {
    A(usize),
    B(String),
    C(()),
    D(u32),
    E(f64),
    F(char)
}

#[derive(Clone, Debug, Arbitrary)]
enum SameType {
    A(usize),
    B(usize),
}


#[test]
fn asserting_arbitrary() {
    fn assert_arbitrary<T: Arbitrary>() {}

    assert_arbitrary::<T1>();
    assert_arbitrary::<T2>();
    assert_arbitrary::<T3>();
    assert_arbitrary::<T4>();
    assert_arbitrary::<T5>();
    assert_arbitrary::<T6>();
    assert_arbitrary::<T7>();
    assert_arbitrary::<T8>();
    assert_arbitrary::<T9>();
    assert_arbitrary::<T10>();
    assert_arbitrary::<T11>();
    assert_arbitrary::<T12>();
    assert_arbitrary::<T13>();
    assert_arbitrary::<T14>();
    assert_arbitrary::<T15>();
    assert_arbitrary::<T16>();
    assert_arbitrary::<T17>();
    assert_arbitrary::<T18>();
    assert_arbitrary::<T19>();
    assert_arbitrary::<T20>();
    assert_arbitrary::<T21>();
    assert_arbitrary::<T22>();
    assert_arbitrary::<T23>();
    assert_arbitrary::<T24>();
    assert_arbitrary::<T25>();
    assert_arbitrary::<Alan>();
    assert_arbitrary::<SameType>();
}
