use std::f64::consts::PI;
use crate::ingress::{Buffer, DecimalView, ProtocolVersion, TimestampMicros};
use crate::tests::TestResult;
use rstest::rstest;
#[test]
fn test_buffer_opt_some_matches_standard() -> TestResult {
let version = ProtocolVersion::V3;
let mut opt_buf = Buffer::new(version);
let arr = vec![1.0f64, 2.0, 3.0];
let ts = TimestampMicros::new(1659548204354448);
opt_buf
.table("test")?
.symbol_opt("sym", Some("val"))?
.column_bool_opt("c_bool", Some(true))?
.column_i64_opt("c_i64", Some(42))?
.column_f64_opt("c_f64", Some(PI))?
.column_str_opt("c_str", Some("text"))?
.column_dec_opt("c_dec", Some(DecimalView::try_new_string("123.45")?))?
.column_arr_opt("c_arr", Some(&arr))?
.column_ts_opt("c_ts", Some(ts))?
.at_now()?;
let mut std_buf = Buffer::new(version);
std_buf
.table("test")?
.symbol("sym", "val")?
.column_bool("c_bool", true)?
.column_i64("c_i64", 42)?
.column_f64("c_f64", PI)?
.column_str("c_str", "text")?
.column_dec("c_dec", DecimalView::try_new_string("123.45")?)?
.column_arr("c_arr", &arr)?
.column_ts("c_ts", ts)?
.at_now()?;
assert_eq!(opt_buf.as_bytes(), std_buf.as_bytes());
Ok(())
}
#[rstest]
fn test_buffer_opt_none_skips_columns(
#[values(ProtocolVersion::V1, ProtocolVersion::V2, ProtocolVersion::V3)]
version: ProtocolVersion,
) -> TestResult {
let mut buffer = Buffer::new(version);
let no_sym: Option<&str> = None;
let no_bool: Option<bool> = None;
let no_i64: Option<i64> = None;
let no_f64: Option<f64> = None;
let no_str: Option<&str> = None;
let no_dec: Option<DecimalView> = None;
let no_arr: Option<&Vec<f64>> = None; let no_ts: Option<TimestampMicros> = None;
buffer
.table("test")?
.symbol_opt("sym", no_sym)?
.column_bool_opt("c_bool", no_bool)?
.column_i64_opt("c_i64", no_i64)?
.column_f64_opt("c_f64", no_f64)?
.column_str_opt("c_str", no_str)?
.column_dec_opt("c_dec", no_dec)?
.column_arr_opt("c_arr", no_arr)?
.column_ts_opt("c_ts", no_ts)?
.column_i64("always_there", 100)?
.at_now()?;
let output = std::str::from_utf8(buffer.as_bytes())?;
assert_eq!(output, "test always_there=100i\n");
Ok(())
}
#[test]
fn test_buffer_opt_array_some_binary_match() -> TestResult {
let arr = [1.0f64, 2.0, 3.0];
let mut opt_buf = Buffer::new(ProtocolVersion::V2);
opt_buf.table("my_test")?;
opt_buf.column_arr_opt("temperature", Some(&arr))?;
let mut std_buf = Buffer::new(ProtocolVersion::V2);
std_buf.table("my_test")?;
std_buf.column_arr("temperature", &arr)?;
assert_eq!(opt_buf.as_bytes(), std_buf.as_bytes());
Ok(())
}