// 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),
}

#[derive(Arbitrary, Debug)]
enum OneTwo {
    One(u8),
    Two(u8, u8),
}

#[derive(Arbitrary, Debug)]
enum ZeroOneTwo {
    Zero,
    One(u8),
    Two(u8, u8),
}

#[derive(Arbitrary, Debug)]
enum Nested {
    First(SameType),
    Second(ZeroOneTwo, OneTwo)
}

#[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>();
    assert_arbitrary::<OneTwo>();
    assert_arbitrary::<ZeroOneTwo>();
    assert_arbitrary::<Nested>();
}
