blob: 7426a6c74330e5819a31b3a72a16dc1269adb7c6 [file] [log] [blame]
// 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.
use proptest::prelude::Arbitrary;
use proptest_derive::Arbitrary;
use std::marker;
use std::marker::PhantomData;
#[derive(Debug)]
struct NotArbitrary;
#[derive(Debug, Arbitrary)]
struct T1<T>(::std::marker::PhantomData<T>);
#[derive(Debug, Arbitrary)]
struct T2(T1<NotArbitrary>);
#[derive(Debug, Arbitrary)]
struct T3<T>(marker::PhantomData<T>);
#[derive(Debug, Arbitrary)]
struct T4(T3<NotArbitrary>);
#[derive(Debug, Arbitrary)]
struct T5<T>(PhantomData<T>);
#[derive(Debug, Arbitrary)]
struct T6(T5<NotArbitrary>);
#[derive(Debug, Arbitrary)]
struct T7<T>(std::marker::PhantomData<T>);
#[derive(Debug, Arbitrary)]
struct T8(T7<NotArbitrary>);
#[derive(Debug, Arbitrary)]
struct T9<A, B, C> {
a: A,
b: B,
c: PhantomData<C>,
}
#[test]
fn asserting_arbitrary() {
fn assert_arbitrary<T: Arbitrary>() {}
assert_arbitrary::<T1<NotArbitrary>>();
assert_arbitrary::<T2>();
assert_arbitrary::<T3<NotArbitrary>>();
assert_arbitrary::<T4>();
assert_arbitrary::<T5<NotArbitrary>>();
assert_arbitrary::<T6>();
assert_arbitrary::<T7<NotArbitrary>>();
assert_arbitrary::<T8>();
assert_arbitrary::<T9<u8, usize, NotArbitrary>>();
}