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, Revision, Uitem,
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 items = iter::empty()
30 .chain(tv.p2pkh_bytes.map(|b| Uitem::Data(Receiver::P2pkh(b))))
31 .chain(tv.p2sh_bytes.map(|b| Uitem::Data(Receiver::P2sh(b))))
32 .chain(
33 tv.sapling_raw_addr
34 .map(|b| Uitem::Data(Receiver::Sapling(b))),
35 )
36 .chain(
37 tv.orchard_raw_addr
38 .map(|b| Uitem::Data(Receiver::Orchard(b))),
39 )
40 .chain(unknown_tc.and_then(|typecode| {
41 unknown_bytes.map(move |data| {
42 Uitem::Data(Receiver::Unknown {
43 typecode,
44 data: data.to_vec(),
45 })
46 })
47 }))
48 .collect();
49
50 let expected_addr = ZcashAddress::from_unified(
51 NetworkType::Main,
52 unified::Address {
53 revision: Revision::R0,
54 items,
55 },
56 );
57
58 let addr: ZcashAddress = tv.unified_addr.parse().unwrap();
60 assert_eq!(addr, expected_addr);
61
62 assert_eq!(expected_addr.to_string(), tv.unified_addr.to_string());
64 }
65}