proptest/arbitrary/_std/
net.rs1use std::net::*;
13
14use crate::arbitrary::*;
15use crate::strategy::statics::static_map;
16use crate::strategy::*;
17
18arbitrary!(AddrParseError; "".parse::<Ipv4Addr>().unwrap_err());
22
23arbitrary!(Ipv4Addr,
24 TupleUnion<(
25 WA<Just<Self>>,
26 WA<Just<Self>>,
27 WA<MapInto<StrategyFor<u32>, Self>>
28 )>;
29 prop_oneof![
30 1 => Just(Self::new(0, 0, 0, 0)),
31 4 => Just(Self::new(127, 0, 0, 1)),
32 10 => any::<u32>().prop_map_into()
33 ]
34);
35
36arbitrary!(Ipv6Addr,
37 TupleUnion<(
38 WA<SMapped<Ipv4Addr, Self>>,
39 WA<MapInto<StrategyFor<[u16; 8]>, Self>>
40 )>;
41 prop_oneof![
42 2 => static_map(any::<Ipv4Addr>(), |ip| ip.to_ipv6_mapped()),
43 1 => any::<[u16; 8]>().prop_map_into()
44 ]
45);
46
47arbitrary!(SocketAddrV4, SMapped<(Ipv4Addr, u16), Self>;
48 static_map(any::<(Ipv4Addr, u16)>(), |(a, b)| Self::new(a, b))
49);
50
51arbitrary!(SocketAddrV6, SMapped<(Ipv6Addr, u16, u32, u32), Self>;
52 static_map(any::<(Ipv6Addr, u16, u32, u32)>(),
53 |(a, b, c, d)| Self::new(a, b, c, d))
54);
55
56arbitrary!(IpAddr,
57 TupleUnion<(WA<MapInto<StrategyFor<Ipv4Addr>, Self>>,
58 WA<MapInto<StrategyFor<Ipv6Addr>, Self>>)>;
59 prop_oneof![
60 any::<Ipv4Addr>().prop_map_into(),
61 any::<Ipv6Addr>().prop_map_into()
62 ]
63);
64
65arbitrary!(Shutdown,
66 TupleUnion<(WA<Just<Self>>, WA<Just<Self>>, WA<Just<Self>>)>;
67 {
68 use std::net::Shutdown::*;
69 prop_oneof![Just(Both), Just(Read), Just(Write)]
70 }
71);
72arbitrary!(SocketAddr,
73 TupleUnion<(WA<MapInto<StrategyFor<SocketAddrV4>, Self>>,
74 WA<MapInto<StrategyFor<SocketAddrV6>, Self>>)>;
75 prop_oneof![
76 any::<SocketAddrV4>().prop_map_into(),
77 any::<SocketAddrV6>().prop_map_into()
78 ]
79);
80
81#[cfg(feature = "unstable")]
82arbitrary!(Ipv6MulticastScope,
83 TupleUnion<(WA<Just<Self>>, WA<Just<Self>>, WA<Just<Self>>,
84 WA<Just<Self>>, WA<Just<Self>>, WA<Just<Self>>,
85 WA<Just<Self>>)>;
86 {
87 use std::net::Ipv6MulticastScope::*;
88 prop_oneof![
89 Just(InterfaceLocal),
90 Just(LinkLocal),
91 Just(RealmLocal),
92 Just(AdminLocal),
93 Just(SiteLocal),
94 Just(OrganizationLocal),
95 Just(Global),
96 ]
97 }
98);
99
100#[cfg(test)]
101mod test {
102 no_panic_test!(
103 addr_parse_error => AddrParseError,
104 ipv4_addr => Ipv4Addr,
105 ipv6_addr => Ipv6Addr,
106 socket_addr_v4 => SocketAddrV4,
107 socket_addr_v6 => SocketAddrV6,
108 ip_addr => IpAddr,
109 shutdown => Shutdown,
110 socket_addr => SocketAddr
111 );
112
113 #[cfg(feature = "unstable")]
114 no_panic_test!(
115 ipv6_multicast_scope => Ipv6MulticastScope
116 );
117}