From 174113f235ac9683748555f000199337a7921ccc Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Mon, 13 Nov 2023 09:39:34 +0100 Subject: [PATCH] add i64 and f32 numeric types --- Cargo.lock | 2 +- charming/src/datatype/source.rs | 64 +++++++++++++++++++++++++++++---- charming/src/datatype/value.rs | 18 ++++++++-- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a7468f..de623e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -249,7 +249,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "charming" -version = "0.2.4" +version = "0.2.5" dependencies = [ "deno_core", "handlebars", diff --git a/charming/src/datatype/source.rs b/charming/src/datatype/source.rs index 84ac87b..c395745 100644 --- a/charming/src/datatype/source.rs +++ b/charming/src/datatype/source.rs @@ -6,7 +6,9 @@ use super::CompositeValue; #[serde(untagged)] pub enum DataSource { Integers(Vec>), - Floats(Vec>), + BigIntegers(Vec>), + Floats(Vec>), + BigFloats(Vec>), Mixed(Vec>), } @@ -16,9 +18,21 @@ impl From>> for DataSource { } } +impl From>> for DataSource { + fn from(v: Vec>) -> Self { + DataSource::BigIntegers(v) + } +} + +impl From>> for DataSource { + fn from(v: Vec>) -> Self { + DataSource::Floats(v) + } +} + impl From>> for DataSource { fn from(v: Vec>) -> Self { - DataSource::Floats(v) + DataSource::BigFloats(v) } } @@ -55,10 +69,22 @@ mod test { assert_eq!(n, NumericValue::Integer(42)); } + #[test] + fn numeric_value_from_i64() { + let n: NumericValue = 42i64.into(); + assert_eq!(n, NumericValue::BigInteger(42)); + } + + #[test] + fn numeric_value_from_f32() { + let n: NumericValue = 0.618f32.into(); + assert_eq!(n, NumericValue::Float(0.618)); + } + #[test] fn numeric_value_from_f64() { let n: NumericValue = 0.618f64.into(); - assert_eq!(n, NumericValue::Float(0.618)); + assert_eq!(n, NumericValue::BigFloat(0.618)); } #[test] @@ -79,18 +105,44 @@ mod test { assert_eq!(ds, DataSource::Integers(vec![vec![1, 2, 3], vec![4, 5, 6]])); } + #[test] + fn data_frame_from_bigintegers() { + let ds: DataSource = vec![vec![1i64, 2i64, 3i64], vec![4i64, 5i64, 6i64]].into(); + assert_eq!( + ds, + DataSource::BigIntegers(vec![vec![1i64, 2i64, 3i64], vec![4i64, 5i64, 6i64]]) + ); + } + #[test] fn data_frame_from_floats() { - let ds: DataSource = vec![vec![1.0, 2.0, 3.0], vec![4.0, 5.0, 6.0]].into(); + let ds: DataSource = + vec![vec![1.0f32, 2.0f32, 3.0f32], vec![4.0f32, 5.0f32, 6.0f32]].into(); assert_eq!( ds, - DataSource::Floats(vec![vec![1.0, 2.0, 3.0], vec![4.0, 5.0, 6.0]]) + DataSource::Floats(vec![ + vec![1.0f32, 2.0f32, 3.0f32], + vec![4.0f32, 5.0f32, 6.0f32] + ]) + ); + } + + #[test] + fn data_frame_from_bigfloats() { + let ds: DataSource = + vec![vec![1.0f64, 2.0f64, 3.0f64], vec![4.0f64, 5.0f64, 6.0f64]].into(); + assert_eq!( + ds, + DataSource::BigFloats(vec![ + vec![1.0f64, 2.0f64, 3.0f64], + vec![4.0f64, 5.0f64, 6.0f64] + ]) ); } #[test] fn data_frame_from_mixed() { - let ds = ds!([1, "Tuesday", 3.0], ["Monday", 2, "Wednesday"]); + let ds = ds!([1i32, "Tuesday", 3.0f32], ["Monday", 2i32, "Wednesday"]); assert_eq!( ds, DataSource::Mixed(vec![ diff --git a/charming/src/datatype/value.rs b/charming/src/datatype/value.rs index 07c8865..93e1bd7 100644 --- a/charming/src/datatype/value.rs +++ b/charming/src/datatype/value.rs @@ -4,7 +4,9 @@ use serde::{Deserialize, Serialize}; #[serde(untagged)] pub enum NumericValue { Integer(i32), - Float(f64), + BigInteger(i64), + Float(f32), + BigFloat(f64), } impl From for NumericValue { @@ -13,9 +15,21 @@ impl From for NumericValue { } } +impl From for NumericValue { + fn from(n: i64) -> Self { + NumericValue::BigInteger(n) + } +} + +impl From for NumericValue { + fn from(n: f32) -> Self { + NumericValue::Float(n) + } +} + impl From for NumericValue { fn from(n: f64) -> Self { - NumericValue::Float(n) + NumericValue::BigFloat(n) } }