blob: 6ff58ac83284e0530e42abba51901bef7a9f3a5c [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;
#[derive(Debug)]
struct NotArbitrary;
/// Ensure that we can't determine that this is PhantomData syntactically.
type HidePH<T> = ::std::marker::PhantomData<T>;
/*
// TODO handle this...
#[derive(Debug, Arbitrary)]
struct T1<#[proptest(no_bound)] T>(HidePH<T>);
#[derive(Debug, Arbitrary)]
struct T2(T1<NotArbitrary>);
#[derive(Debug, Arbitrary)]
struct T3<
#[proptest(no_bound)] A,
B,
#[proptest(no_bound)] G,
> {
alpha: HidePH<A>,
beta: B,
gamma: HidePH<G>,
}
#[derive(Debug, Arbitrary)]
struct T4(T3<NotArbitrary, bool, NotArbitrary>);
*/
#[derive(Debug, Arbitrary)]
#[proptest(no_bound)]
struct T5<A, B, C>(HidePH<(A, B, C)>);
#[derive(Debug, Arbitrary)]
struct T6(T5<NotArbitrary, NotArbitrary, NotArbitrary>);
#[test]
fn asserting_arbitrary() {
fn assert_arbitrary<T: Arbitrary>() {}
/*
assert_arbitrary::<T2>();
assert_arbitrary::<T4>();
*/
assert_arbitrary::<T6>();
}