Skip to content

Commit 7031256

Browse files
committed
move to only metrics
1 parent d49f7c6 commit 7031256

File tree

4 files changed

+251
-151
lines changed

4 files changed

+251
-151
lines changed
+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
mod set;
22

3+
#[cfg(feature = "metrics")]
34
pub use set::AttributeSet;

opentelemetry/src/common.rs

+1-150
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::borrow::Cow;
2-
use std::cmp::Ordering;
3-
use std::hash::{Hash, Hasher};
2+
use std::hash::Hash;
43
use std::sync::Arc;
54
use std::{fmt, hash};
65

@@ -424,55 +423,6 @@ impl KeyValue {
424423
}
425424
}
426425

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-
476426
/// Marker trait for errors returned by exporters
477427
pub trait ExportError: std::error::Error + Send + Sync + 'static {
478428
/// The name of exporter that returned this error
@@ -645,102 +595,3 @@ impl InstrumentationLibraryBuilder {
645595
}
646596
}
647597
}
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-
}

opentelemetry/src/metrics/keyvalue.rs

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#[cfg(test)]
2+
mod tests {
3+
use rand::Rng;
4+
5+
use crate::KeyValue;
6+
use std::hash::DefaultHasher;
7+
use std::hash::{Hash, Hasher};
8+
9+
#[test]
10+
fn equality_kv_float() {
11+
let kv1 = KeyValue::new("key", 1.0);
12+
let kv2 = KeyValue::new("key", 1.0);
13+
assert_eq!(kv1, kv2);
14+
15+
let kv1 = KeyValue::new("key", 1.0);
16+
let kv2 = KeyValue::new("key", 1.01);
17+
assert_ne!(kv1, kv2);
18+
19+
let kv1 = KeyValue::new("key", std::f64::NAN);
20+
let kv2 = KeyValue::new("key", std::f64::NAN);
21+
assert_ne!(kv1, kv2, "NAN is not equal to itself");
22+
23+
let kv1 = KeyValue::new("key", std::f64::INFINITY);
24+
let kv2 = KeyValue::new("key", std::f64::INFINITY);
25+
assert_eq!(kv1, kv2);
26+
27+
let kv1 = KeyValue::new("key", std::f64::NEG_INFINITY);
28+
let kv2 = KeyValue::new("key", std::f64::NEG_INFINITY);
29+
assert_eq!(kv1, kv2);
30+
31+
let mut rng = rand::thread_rng();
32+
33+
for _ in 0..100 {
34+
let random_value = rng.gen::<f64>();
35+
let kv1 = KeyValue::new("key", random_value);
36+
let kv2 = KeyValue::new("key", random_value);
37+
assert_eq!(kv1, kv2);
38+
}
39+
}
40+
41+
#[test]
42+
fn hash_kv_float() {
43+
let kv1 = KeyValue::new("key", 1.0);
44+
let kv2 = KeyValue::new("key", 1.0);
45+
assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
46+
47+
let kv1 = KeyValue::new("key", 1.001);
48+
let kv2 = KeyValue::new("key", 1.001);
49+
assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
50+
51+
let kv1 = KeyValue::new("key", 1.001);
52+
let kv2 = KeyValue::new("key", 1.002);
53+
assert_ne!(hash_helper(&kv1), hash_helper(&kv2));
54+
55+
let kv1 = KeyValue::new("key", std::f64::NAN);
56+
let kv2 = KeyValue::new("key", std::f64::NAN);
57+
assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
58+
59+
let kv1 = KeyValue::new("key", std::f64::INFINITY);
60+
let kv2 = KeyValue::new("key", std::f64::INFINITY);
61+
assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
62+
63+
let mut rng = rand::thread_rng();
64+
65+
for _ in 0..100 {
66+
let random_value = rng.gen::<f64>();
67+
let kv1 = KeyValue::new("key", random_value);
68+
let kv2 = KeyValue::new("key", random_value);
69+
assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
70+
}
71+
}
72+
73+
#[test]
74+
fn hash_kv_order() {
75+
let float_vals = [
76+
0.0,
77+
1.0,
78+
-1.0,
79+
std::f64::INFINITY,
80+
std::f64::NEG_INFINITY,
81+
std::f64::NAN,
82+
std::f64::MIN,
83+
std::f64::MAX,
84+
];
85+
86+
for v in float_vals {
87+
let kv1 = KeyValue::new("a", v);
88+
let kv2 = KeyValue::new("b", v);
89+
assert!(kv1 < kv2, "Order is solely based on key!");
90+
}
91+
}
92+
93+
fn hash_helper<T: Hash>(item: &T) -> u64 {
94+
let mut hasher = DefaultHasher::new();
95+
item.hash(&mut hasher);
96+
hasher.finish()
97+
}
98+
}

0 commit comments

Comments
 (0)