Guest User

Untitled

a guest
Jan 20th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. use quickcheck::*;
  2. use fasthash::MetroHasher;
  3. use itertools::Itertools;
  4. use im_rc::hashset::HashSet;
  5.  
  6. fn make_std_set(items: &[i32]) -> std::collections::HashSet<i32> {
  7. items.iter().cloned().collect()
  8. }
  9.  
  10. fn make_set(items: &[i32]) -> HashSet<i32, MyHasher> {
  11. items.iter().cloned().collect()
  12. }
  13.  
  14. struct MyHasher {}
  15. impl std::hash::BuildHasher for MyHasher {
  16. type Hasher = MetroHasher;
  17.  
  18. fn build_hasher(&self) -> MetroHasher {
  19. MetroHasher::default()
  20. }
  21. }
  22.  
  23. impl Default for MyHasher {
  24. fn default() -> MyHasher {
  25. MyHasher {}
  26. }
  27. }
  28.  
  29. quickcheck! {
  30. fn prop(base_values: Vec<i32>, union_values: Vec<Vec<i32>>) -> bool {
  31. let lhs = make_set(&base_values);
  32. let lhs_std = make_std_set(&base_values);
  33.  
  34. for values in union_values {
  35. let rhs = make_set(&values);
  36. let rhs_std = make_std_set(&values);
  37.  
  38. let union = lhs.clone().union(rhs);
  39. let union_std = lhs_std.union(&rhs_std);
  40.  
  41. if union_std.count() != union.len() {
  42. return false;
  43. }
  44. }
  45. true
  46. }
  47. }
  48.  
  49. #[test]
  50. fn test() {
  51.  
  52. let base_values = vec![48];
  53. let union_values = vec![
  54. vec![-65],
  55. vec![69, 45, 76]
  56. ];
  57.  
  58. let lhs = make_set(&base_values);
  59. let lhs_std = make_std_set(&base_values);
  60.  
  61. for values in union_values {
  62. let rhs = make_set(&values);
  63. let rhs_std = make_std_set(&values);
  64.  
  65. let union = lhs.clone().union(rhs);
  66. let union_std = lhs_std.union(&rhs_std);
  67.  
  68. if union_std.count() != union.len() {
  69. assert!(false);
  70. }
  71. }
  72. }
Add Comment
Please, Sign In to add comment