]>
git.proxmox.com Git - rustc.git/blob - vendor/salsa/tests/interned.rs
1 //! Test that you can implement a query using a `dyn Trait` setup.
5 #[salsa::database(InternStorage)]
8 storage
: salsa
::Storage
<Self>,
11 impl salsa
::Database
for Database {}
13 impl salsa
::ParallelDatabase
for Database
{
14 fn snapshot(&self) -> salsa
::Snapshot
<Self> {
15 salsa
::Snapshot
::new(Database
{
16 storage
: self.storage
.snapshot(),
21 #[salsa::query_group(InternStorage)]
24 fn intern1(&self, x
: String
) -> InternId
;
27 fn intern2(&self, x
: String
, y
: String
) -> InternId
;
30 fn intern_key(&self, x
: String
) -> InternKey
;
33 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
34 pub struct InternKey(InternId
);
36 impl salsa
::InternKey
for InternKey
{
37 fn from_intern_id(v
: InternId
) -> Self {
41 fn as_intern_id(&self) -> InternId
{
48 let db
= Database
::default();
49 let foo0
= db
.intern1(format
!("foo"));
50 let bar0
= db
.intern1(format
!("bar"));
51 let foo1
= db
.intern1(format
!("foo"));
52 let bar1
= db
.intern1(format
!("bar"));
54 assert_eq
!(foo0
, foo1
);
55 assert_eq
!(bar0
, bar1
);
56 assert_ne
!(foo0
, bar0
);
58 assert_eq
!(format
!("foo"), db
.lookup_intern1(foo0
));
59 assert_eq
!(format
!("bar"), db
.lookup_intern1(bar0
));
64 let db
= Database
::default();
65 let foo0
= db
.intern2(format
!("x"), format
!("foo"));
66 let bar0
= db
.intern2(format
!("x"), format
!("bar"));
67 let foo1
= db
.intern2(format
!("x"), format
!("foo"));
68 let bar1
= db
.intern2(format
!("x"), format
!("bar"));
70 assert_eq
!(foo0
, foo1
);
71 assert_eq
!(bar0
, bar1
);
72 assert_ne
!(foo0
, bar0
);
74 assert_eq
!((format
!("x"), format
!("foo")), db
.lookup_intern2(foo0
));
75 assert_eq
!((format
!("x"), format
!("bar")), db
.lookup_intern2(bar0
));
79 fn test_intern_key() {
80 let db
= Database
::default();
81 let foo0
= db
.intern_key(format
!("foo"));
82 let bar0
= db
.intern_key(format
!("bar"));
83 let foo1
= db
.intern_key(format
!("foo"));
84 let bar1
= db
.intern_key(format
!("bar"));
86 assert_eq
!(foo0
, foo1
);
87 assert_eq
!(bar0
, bar1
);
88 assert_ne
!(foo0
, bar0
);
90 assert_eq
!(format
!("foo"), db
.lookup_intern_key(foo0
));
91 assert_eq
!(format
!("bar"), db
.lookup_intern_key(bar0
));