forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add unit test to ensure that both parts of a DefPathHash depend on th…
…e defining crate's ID.
- Loading branch information
1 parent
97380e3
commit 9e50544
Showing
4 changed files
with
54 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
use crate::definitions::{DefKey, DefPathData, DisambiguatedDefPathData}; | ||
use rustc_data_structures::fingerprint::Fingerprint; | ||
use rustc_span::crate_disambiguator::CrateDisambiguator; | ||
use rustc_span::def_id::{DefPathHash, StableCrateId}; | ||
|
||
#[test] | ||
fn def_path_hash_depends_on_crate_id() { | ||
// This test makes sure that *both* halves of a DefPathHash depend on | ||
// the crate-id of the defining crate. This is a desirable property | ||
// because the crate-id can be more easily changed than the DefPath | ||
// of an item, so, in the case of a crate-local DefPathHash collision, | ||
// the user can simply "role the dice again" for all DefPathHashes in | ||
// the crate by changing the crate disambiguator (e.g. via bumping the | ||
// crate's version number). | ||
|
||
let d0 = CrateDisambiguator::from(Fingerprint::new(12, 34)); | ||
let d1 = CrateDisambiguator::from(Fingerprint::new(56, 78)); | ||
|
||
let h0 = mk_test_hash("foo", d0); | ||
let h1 = mk_test_hash("foo", d1); | ||
|
||
assert_ne!(h0.stable_crate_id(), h1.stable_crate_id()); | ||
assert_ne!(h0.local_hash(), h1.local_hash()); | ||
|
||
fn mk_test_hash(crate_name: &str, crate_disambiguator: CrateDisambiguator) -> DefPathHash { | ||
let stable_crate_id = StableCrateId::new(crate_name, crate_disambiguator); | ||
let parent_hash = DefPathHash::new(stable_crate_id, 0); | ||
|
||
let key = DefKey { | ||
parent: None, | ||
disambiguated_data: DisambiguatedDefPathData { | ||
data: DefPathData::CrateRoot, | ||
disambiguator: 0, | ||
}, | ||
}; | ||
|
||
key.compute_stable_hash(parent_hash) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters