zcash_address/
test_vectors.rs1pub use crate::unified::address::test_vectors::TEST_VECTORS as UNIFIED;
3
4#[cfg(test)]
5use {
6 crate::{
7 ToAddress, ZcashAddress,
8 unified::{
9 self,
10 address::{Receiver, test_vectors::TEST_VECTORS},
11 },
12 },
13 alloc::string::ToString,
14 core::iter,
15 zcash_protocol::consensus::NetworkType,
16};
17
18#[test]
19fn unified() {
20 for tv in TEST_VECTORS {
21 assert!(tv.p2pkh_bytes.is_none() || tv.p2sh_bytes.is_none());
24 assert!(tv.sapling_raw_addr.is_some() || tv.orchard_raw_addr.is_some());
26
27 let unknown_tc = tv.unknown_typecode;
28 let unknown_bytes = tv.unknown_bytes;
29 let receivers = iter::empty()
30 .chain(tv.p2pkh_bytes.map(Receiver::P2pkh))
31 .chain(tv.p2sh_bytes.map(Receiver::P2sh))
32 .chain(tv.sapling_raw_addr.map(Receiver::Sapling))
33 .chain(tv.orchard_raw_addr.map(Receiver::Orchard))
34 .chain(unknown_tc.and_then(|typecode| {
35 unknown_bytes.map(move |data| Receiver::Unknown {
36 typecode,
37 data: data.to_vec(),
38 })
39 }))
40 .collect();
41
42 let expected_addr =
43 ZcashAddress::from_unified(NetworkType::Main, unified::Address(receivers));
44
45 let addr: ZcashAddress = tv.unified_addr.parse().unwrap();
47 assert_eq!(addr, expected_addr);
48
49 assert_eq!(expected_addr.to_string(), tv.unified_addr.to_string());
51 }
52}