|
1 | 1 | use std::borrow::Cow;
|
2 |
| -use std::cmp::Ordering; |
3 |
| -use std::hash::{Hash, Hasher}; |
| 2 | +use std::hash::Hash; |
4 | 3 | use std::sync::Arc;
|
5 | 4 | use std::{fmt, hash};
|
6 | 5 |
|
@@ -424,55 +423,6 @@ impl KeyValue {
|
424 | 423 | }
|
425 | 424 | }
|
426 | 425 |
|
427 |
| -#[derive(Debug, Clone, Copy)] |
428 |
| -struct F64Hashable(f64); |
429 |
| - |
430 |
| -impl PartialEq for F64Hashable { |
431 |
| - fn eq(&self, other: &Self) -> bool { |
432 |
| - self.0.to_bits() == other.0.to_bits() |
433 |
| - } |
434 |
| -} |
435 |
| - |
436 |
| -impl Eq for F64Hashable {} |
437 |
| - |
438 |
| -impl Hash for F64Hashable { |
439 |
| - fn hash<H: Hasher>(&self, state: &mut H) { |
440 |
| - self.0.to_bits().hash(state); |
441 |
| - } |
442 |
| -} |
443 |
| - |
444 |
| -impl Hash for KeyValue { |
445 |
| - fn hash<H: Hasher>(&self, state: &mut H) { |
446 |
| - self.key.hash(state); |
447 |
| - match &self.value { |
448 |
| - Value::F64(f) => F64Hashable(*f).hash(state), |
449 |
| - Value::Array(a) => match a { |
450 |
| - Array::Bool(b) => b.hash(state), |
451 |
| - Array::I64(i) => i.hash(state), |
452 |
| - Array::F64(f) => f.iter().for_each(|f| F64Hashable(*f).hash(state)), |
453 |
| - Array::String(s) => s.hash(state), |
454 |
| - }, |
455 |
| - Value::Bool(b) => b.hash(state), |
456 |
| - Value::I64(i) => i.hash(state), |
457 |
| - Value::String(s) => s.hash(state), |
458 |
| - }; |
459 |
| - } |
460 |
| -} |
461 |
| - |
462 |
| -impl PartialOrd for KeyValue { |
463 |
| - fn partial_cmp(&self, other: &Self) -> Option<Ordering> { |
464 |
| - Some(self.cmp(other)) |
465 |
| - } |
466 |
| -} |
467 |
| - |
468 |
| -impl Ord for KeyValue { |
469 |
| - fn cmp(&self, other: &Self) -> Ordering { |
470 |
| - self.key.cmp(&other.key) |
471 |
| - } |
472 |
| -} |
473 |
| - |
474 |
| -impl Eq for KeyValue {} |
475 |
| - |
476 | 426 | /// Marker trait for errors returned by exporters
|
477 | 427 | pub trait ExportError: std::error::Error + Send + Sync + 'static {
|
478 | 428 | /// The name of exporter that returned this error
|
@@ -645,102 +595,3 @@ impl InstrumentationLibraryBuilder {
|
645 | 595 | }
|
646 | 596 | }
|
647 | 597 | }
|
648 |
| - |
649 |
| -#[cfg(test)] |
650 |
| -mod tests { |
651 |
| - use rand::Rng; |
652 |
| - |
653 |
| - use crate::KeyValue; |
654 |
| - use std::hash::DefaultHasher; |
655 |
| - use std::hash::{Hash, Hasher}; |
656 |
| - |
657 |
| - #[test] |
658 |
| - fn equality_kv_float() { |
659 |
| - let kv1 = KeyValue::new("key", 1.0); |
660 |
| - let kv2 = KeyValue::new("key", 1.0); |
661 |
| - assert_eq!(kv1, kv2); |
662 |
| - |
663 |
| - let kv1 = KeyValue::new("key", 1.0); |
664 |
| - let kv2 = KeyValue::new("key", 1.01); |
665 |
| - assert_ne!(kv1, kv2); |
666 |
| - |
667 |
| - let kv1 = KeyValue::new("key", std::f64::NAN); |
668 |
| - let kv2 = KeyValue::new("key", std::f64::NAN); |
669 |
| - assert_ne!(kv1, kv2, "NAN is not equal to itself"); |
670 |
| - |
671 |
| - let kv1 = KeyValue::new("key", std::f64::INFINITY); |
672 |
| - let kv2 = KeyValue::new("key", std::f64::INFINITY); |
673 |
| - assert_eq!(kv1, kv2); |
674 |
| - |
675 |
| - let kv1 = KeyValue::new("key", std::f64::NEG_INFINITY); |
676 |
| - let kv2 = KeyValue::new("key", std::f64::NEG_INFINITY); |
677 |
| - assert_eq!(kv1, kv2); |
678 |
| - |
679 |
| - let mut rng = rand::thread_rng(); |
680 |
| - |
681 |
| - for _ in 0..100 { |
682 |
| - let random_value = rng.gen::<f64>(); |
683 |
| - let kv1 = KeyValue::new("key", random_value); |
684 |
| - let kv2 = KeyValue::new("key", random_value); |
685 |
| - assert_eq!(kv1, kv2); |
686 |
| - } |
687 |
| - } |
688 |
| - |
689 |
| - #[test] |
690 |
| - fn hash_kv_float() { |
691 |
| - let kv1 = KeyValue::new("key", 1.0); |
692 |
| - let kv2 = KeyValue::new("key", 1.0); |
693 |
| - assert_eq!(hash_helper(&kv1), hash_helper(&kv2)); |
694 |
| - |
695 |
| - let kv1 = KeyValue::new("key", 1.001); |
696 |
| - let kv2 = KeyValue::new("key", 1.001); |
697 |
| - assert_eq!(hash_helper(&kv1), hash_helper(&kv2)); |
698 |
| - |
699 |
| - let kv1 = KeyValue::new("key", 1.001); |
700 |
| - let kv2 = KeyValue::new("key", 1.002); |
701 |
| - assert_ne!(hash_helper(&kv1), hash_helper(&kv2)); |
702 |
| - |
703 |
| - let kv1 = KeyValue::new("key", std::f64::NAN); |
704 |
| - let kv2 = KeyValue::new("key", std::f64::NAN); |
705 |
| - assert_eq!(hash_helper(&kv1), hash_helper(&kv2)); |
706 |
| - |
707 |
| - let kv1 = KeyValue::new("key", std::f64::INFINITY); |
708 |
| - let kv2 = KeyValue::new("key", std::f64::INFINITY); |
709 |
| - assert_eq!(hash_helper(&kv1), hash_helper(&kv2)); |
710 |
| - |
711 |
| - let mut rng = rand::thread_rng(); |
712 |
| - |
713 |
| - for _ in 0..100 { |
714 |
| - let random_value = rng.gen::<f64>(); |
715 |
| - let kv1 = KeyValue::new("key", random_value); |
716 |
| - let kv2 = KeyValue::new("key", random_value); |
717 |
| - assert_eq!(hash_helper(&kv1), hash_helper(&kv2)); |
718 |
| - } |
719 |
| - } |
720 |
| - |
721 |
| - #[test] |
722 |
| - fn hash_kv_order() { |
723 |
| - let float_vals = [ |
724 |
| - 0.0, |
725 |
| - 1.0, |
726 |
| - -1.0, |
727 |
| - std::f64::INFINITY, |
728 |
| - std::f64::NEG_INFINITY, |
729 |
| - std::f64::NAN, |
730 |
| - std::f64::MIN, |
731 |
| - std::f64::MAX, |
732 |
| - ]; |
733 |
| - |
734 |
| - for v in float_vals { |
735 |
| - let kv1 = KeyValue::new("a", v); |
736 |
| - let kv2 = KeyValue::new("b", v); |
737 |
| - assert!(kv1 < kv2, "Order is solely based on key!"); |
738 |
| - } |
739 |
| - } |
740 |
| - |
741 |
| - fn hash_helper<T: Hash>(item: &T) -> u64 { |
742 |
| - let mut hasher = DefaultHasher::new(); |
743 |
| - item.hash(&mut hasher); |
744 |
| - hasher.finish() |
745 |
| - } |
746 |
| -} |
0 commit comments