From d036e1c696eb1547ae2fa543139c5173cd10c23c Mon Sep 17 00:00:00 2001 From: Milind Srivastava Date: Thu, 9 Apr 2026 12:12:34 -0400 Subject: [PATCH 1/3] test: added unit tests that can run from cargo workspace --- .../src/ast_matching/promql_pattern.rs | 445 ++++++ .../tests/rust_pattern_matching/Cargo.lock | 1204 ----------------- .../tests/rust_pattern_matching/Cargo.toml | 22 - .../tests/rust_pattern_matching/src/main.rs | 156 --- 4 files changed, 445 insertions(+), 1382 deletions(-) delete mode 100644 asap-common/tests/rust_pattern_matching/Cargo.lock delete mode 100644 asap-common/tests/rust_pattern_matching/Cargo.toml delete mode 100644 asap-common/tests/rust_pattern_matching/src/main.rs diff --git a/asap-common/dependencies/rs/promql_utilities/src/ast_matching/promql_pattern.rs b/asap-common/dependencies/rs/promql_utilities/src/ast_matching/promql_pattern.rs index 625fee5b..18874e44 100644 --- a/asap-common/dependencies/rs/promql_utilities/src/ast_matching/promql_pattern.rs +++ b/asap-common/dependencies/rs/promql_utilities/src/ast_matching/promql_pattern.rs @@ -915,3 +915,448 @@ impl AggregationModifier { // } // } } + +// ============================================================================= +// Tests migrated from asap-common/tests/{compare_matched_tokens, +// rust_pattern_matching, compare_patterns} binary runners. +// +// The PatternTester struct and all build_* methods below are copied verbatim +// from compare_matched_tokens/rust_tests/src/pattern_tests.rs. Only the +// main() harness has been replaced with individual #[test] functions, and +// assertions come from the test_data/promql_queries.json file that was used +// by the binary runner. +// ============================================================================= +#[cfg(test)] +mod tests { + use super::*; + use crate::ast_matching::PromQLPatternBuilder; + use promql_parser::parser as promql; + use serde_json::Value; + + // ------------------------------------------------------------------ + // PatternTester — copied from compare_matched_tokens/rust_tests/src/pattern_tests.rs + // ------------------------------------------------------------------ + + struct PatternTester { + patterns: HashMap>, + } + + impl PatternTester { + fn new() -> Self { + let mut patterns = HashMap::new(); + + // ONLY_TEMPORAL patterns + let temporal_patterns = vec![ + // Rate pattern + PromQLPattern::new(Self::build_rate_pattern()), + // Quantile over time pattern + PromQLPattern::new(Self::build_quantile_over_time_pattern()), + ]; + + // ONLY_SPATIAL patterns + let spatial_patterns = vec![ + // Sum aggregation pattern + PromQLPattern::new(Self::build_sum_pattern()), + // Simple metric pattern + PromQLPattern::new(Self::build_metric_pattern()), + ]; + + // ONE_TEMPORAL_ONE_SPATIAL patterns + let combined_patterns = vec![ + // Aggregation of single-arg temporal functions + PromQLPattern::new(Self::build_one_temporal_one_spatial_pattern()), + // Aggregation of quantile_over_time (2-arg) + PromQLPattern::new(Self::build_combined_quantile_pattern()), + ]; + + patterns.insert("ONLY_SPATIAL".to_string(), spatial_patterns); + patterns.insert("ONLY_TEMPORAL".to_string(), temporal_patterns); + patterns.insert("ONE_TEMPORAL_ONE_SPATIAL".to_string(), combined_patterns); + + Self { patterns } + } + + fn classify_query(&self, query: &str) -> Option<(String, PromQLMatchResult)> { + let ast = promql::parse(query).expect("Failed to parse query"); + + for (pattern_type, pattern_list) in &self.patterns { + for pattern in pattern_list { + let match_result = pattern.matches(&ast); + if match_result.matches { + let final_type = if pattern_type == "ONLY_SPATIAL" { + if match_result.tokens.contains_key("aggregation") { + pattern_type.clone() + } else if match_result.tokens.contains_key("metric") { + "ONLY_VECTOR".to_string() + } else { + pattern_type.clone() + } + } else { + pattern_type.clone() + }; + return Some((final_type, match_result)); + } + } + } + None + } + + fn build_rate_pattern() -> Option> { + let ms = PromQLPatternBuilder::matrix_selector( + PromQLPatternBuilder::metric(None, None, None, Some("metric")), + None, + Some("range_vector"), + ); + + let args: Vec>> = vec![ms]; + + PromQLPatternBuilder::function( + vec![ + "rate", + "increase", + "avg_over_time", + "sum_over_time", + "count_over_time", + "min_over_time", + "max_over_time", + ], + args, + Some("function"), + None, + ) + } + + fn build_quantile_over_time_pattern() -> Option> { + let num = PromQLPatternBuilder::number(None, None); + let ms = PromQLPatternBuilder::matrix_selector( + PromQLPatternBuilder::metric(None, None, None, Some("metric")), + None, + Some("range_vector"), + ); + + let args: Vec>> = vec![num, ms]; + + PromQLPatternBuilder::function( + vec!["quantile_over_time"], + args, + Some("function"), + Some("function_args"), + ) + } + + fn build_sum_pattern() -> Option> { + PromQLPatternBuilder::aggregation( + vec!["sum", "count", "avg", "min", "max"], + PromQLPatternBuilder::metric(None, None, None, Some("metric")), + None, + None, + None, + Some("aggregation"), + ) + } + + fn build_metric_pattern() -> Option> { + PromQLPatternBuilder::metric(None, None, None, Some("metric")) + } + + fn build_one_temporal_one_spatial_pattern() -> Option> { + let ms = PromQLPatternBuilder::matrix_selector( + PromQLPatternBuilder::metric(None, None, None, Some("metric")), + None, + Some("range_vector"), + ); + + let func_args: Vec>> = vec![ms]; + + let func = PromQLPatternBuilder::function( + vec![ + "sum_over_time", + "count_over_time", + "avg_over_time", + "min_over_time", + "max_over_time", + "rate", + "increase", + ], + func_args, + Some("function"), + None, + ); + + PromQLPatternBuilder::aggregation( + vec!["sum", "count", "avg", "quantile", "min", "max"], + func, + None, + None, + None, + Some("aggregation"), + ) + } + + fn build_combined_quantile_pattern() -> Option> { + let num = PromQLPatternBuilder::number(None, None); + let ms = PromQLPatternBuilder::matrix_selector( + PromQLPatternBuilder::metric(None, None, None, Some("metric")), + None, + Some("range_vector"), + ); + let func_args: Vec>> = vec![num, ms]; + let func = PromQLPatternBuilder::function( + vec!["quantile_over_time"], + func_args, + Some("function"), + None, + ); + PromQLPatternBuilder::aggregation( + vec!["sum", "count", "avg", "quantile", "min", "max"], + func, + None, + None, + None, + Some("aggregation"), + ) + } + + #[allow(dead_code)] + fn build_sum_rate_pattern() -> Option> { + let ms = PromQLPatternBuilder::matrix_selector( + PromQLPatternBuilder::metric(None, None, None, Some("metric")), + None, + Some("range_vector"), + ); + + let func_args: Vec>> = vec![ms]; + + let func = PromQLPatternBuilder::function( + vec!["rate", "increase"], + func_args, + Some("function"), + None, + ); + + PromQLPatternBuilder::aggregation( + vec!["sum", "count", "avg", "min", "max"], + func, + None, + None, + None, + Some("aggregation"), + ) + } + } + + // ------------------------------------------------------------------ + // Tests from compare_matched_tokens/test_data/promql_queries.json + // ------------------------------------------------------------------ + + #[test] + fn temporal_rate_basic() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("rate(http_requests_total{job=\"api\"}[5m])") + .unwrap(); + assert_eq!(cat, "ONLY_TEMPORAL"); + assert_eq!(result.get_metric_name().unwrap(), "http_requests_total"); + assert_eq!(result.get_function_name().unwrap(), "rate"); + assert_eq!(result.get_range_duration().unwrap(), Duration::minutes(5)); + let labels = &result.tokens["metric"].metric.as_ref().unwrap().labels; + assert_eq!(labels.get("job").unwrap(), "api"); + } + + #[test] + fn temporal_increase_basic() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("increase(http_requests_total[1h])") + .unwrap(); + assert_eq!(cat, "ONLY_TEMPORAL"); + assert_eq!(result.get_metric_name().unwrap(), "http_requests_total"); + assert_eq!(result.get_function_name().unwrap(), "increase"); + assert_eq!(result.get_range_duration().unwrap(), Duration::hours(1)); + } + + #[test] + fn temporal_quantile_over_time() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("quantile_over_time(0.95, cpu_usage{instance=\"host1\"}[10m])") + .unwrap(); + assert_eq!(cat, "ONLY_TEMPORAL"); + assert_eq!(result.get_metric_name().unwrap(), "cpu_usage"); + assert_eq!(result.get_function_name().unwrap(), "quantile_over_time"); + assert_eq!(result.get_range_duration().unwrap(), Duration::minutes(10)); + let labels = &result.tokens["metric"].metric.as_ref().unwrap().labels; + assert_eq!(labels.get("instance").unwrap(), "host1"); + } + + #[test] + fn temporal_avg_over_time() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("avg_over_time(memory_bytes[30m])") + .unwrap(); + assert_eq!(cat, "ONLY_TEMPORAL"); + assert_eq!(result.get_metric_name().unwrap(), "memory_bytes"); + assert_eq!(result.get_function_name().unwrap(), "avg_over_time"); + assert_eq!(result.get_range_duration().unwrap(), Duration::minutes(30)); + } + + #[test] + fn spatial_sum_aggregation() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("sum(http_requests_total{job=\"api\"})") + .unwrap(); + assert_eq!(cat, "ONLY_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "http_requests_total"); + assert_eq!(result.get_aggregation_op().unwrap(), "sum"); + let labels = &result.tokens["metric"].metric.as_ref().unwrap().labels; + assert_eq!(labels.get("job").unwrap(), "api"); + } + + #[test] + fn spatial_avg_aggregation() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("avg by (instance) (cpu_usage)") + .unwrap(); + assert_eq!(cat, "ONLY_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "cpu_usage"); + assert_eq!(result.get_aggregation_op().unwrap(), "avg"); + } + + #[test] + fn spatial_count_aggregation() { + let tester = PatternTester::new(); + let (cat, result) = tester.classify_query("count(up{job=\"node\"})").unwrap(); + assert_eq!(cat, "ONLY_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "up"); + assert_eq!(result.get_aggregation_op().unwrap(), "count"); + let labels = &result.tokens["metric"].metric.as_ref().unwrap().labels; + assert_eq!(labels.get("job").unwrap(), "node"); + } + + #[test] + fn combined_sum_of_rate() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("sum(rate(http_requests_total{job=\"api\"}[5m]))") + .unwrap(); + assert_eq!(cat, "ONE_TEMPORAL_ONE_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "http_requests_total"); + assert_eq!(result.get_function_name().unwrap(), "rate"); + assert_eq!(result.get_aggregation_op().unwrap(), "sum"); + assert_eq!(result.get_range_duration().unwrap(), Duration::minutes(5)); + } + + #[test] + fn combined_avg_of_quantile_over_time() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("avg(quantile_over_time(0.99, response_time_seconds[15m]))") + .unwrap(); + assert_eq!(cat, "ONE_TEMPORAL_ONE_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "response_time_seconds"); + assert_eq!(result.get_function_name().unwrap(), "quantile_over_time"); + assert_eq!(result.get_aggregation_op().unwrap(), "avg"); + assert_eq!(result.get_range_duration().unwrap(), Duration::minutes(15)); + } + + #[test] + fn combined_sum_of_avg_over_time() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("sum by (job) (avg_over_time(memory_bytes{env=\"prod\"}[1h]))") + .unwrap(); + assert_eq!(cat, "ONE_TEMPORAL_ONE_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "memory_bytes"); + assert_eq!(result.get_function_name().unwrap(), "avg_over_time"); + assert_eq!(result.get_aggregation_op().unwrap(), "sum"); + assert_eq!(result.get_range_duration().unwrap(), Duration::hours(1)); + let labels = &result.tokens["metric"].metric.as_ref().unwrap().labels; + assert_eq!(labels.get("env").unwrap(), "prod"); + } + + // ------------------------------------------------------------------ + // Tests from rust_pattern_matching binary + // ------------------------------------------------------------------ + + #[test] + fn spatial_of_temporal_sum_of_sum_over_time() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("sum by (instance, job) (sum_over_time(fake_metric_total[1m]))") + .unwrap(); + assert_eq!(cat, "ONE_TEMPORAL_ONE_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "fake_metric_total"); + assert_eq!(result.get_function_name().unwrap(), "sum_over_time"); + assert_eq!(result.get_aggregation_op().unwrap(), "sum"); + assert_eq!(result.get_range_duration().unwrap(), Duration::minutes(1)); + } + + #[test] + fn spatial_of_temporal_sum_of_count_over_time() { + let tester = PatternTester::new(); + let (cat, result) = tester + .classify_query("sum by (instance, job) (count_over_time(fake_metric_total[1m]))") + .unwrap(); + assert_eq!(cat, "ONE_TEMPORAL_ONE_SPATIAL"); + assert_eq!(result.get_metric_name().unwrap(), "fake_metric_total"); + assert_eq!(result.get_function_name().unwrap(), "count_over_time"); + assert_eq!(result.get_aggregation_op().unwrap(), "sum"); + } + + // ------------------------------------------------------------------ + // Tests from compare_patterns binary (pattern construction) + // ------------------------------------------------------------------ + + #[test] + fn pattern_builds_temporal_rate_increase() { + let ast = PatternTester::build_rate_pattern(); + assert!(ast.is_some()); + assert_eq!(ast.unwrap()["type"], "Call"); + } + + #[test] + fn pattern_builds_temporal_quantile_over_time() { + let ast = PatternTester::build_quantile_over_time_pattern(); + assert!(ast.is_some()); + assert_eq!(ast.unwrap()["type"], "Call"); + } + + #[test] + fn pattern_builds_spatial_aggregation() { + let ast = PatternTester::build_sum_pattern(); + assert!(ast.is_some()); + assert_eq!(ast.unwrap()["type"], "AggregateExpr"); + } + + #[test] + fn pattern_builds_metric() { + let ast = PatternTester::build_metric_pattern(); + assert!(ast.is_some()); + assert_eq!(ast.unwrap()["type"], "VectorSelector"); + } + + #[test] + fn pattern_builds_combined_temporal() { + let ast = PatternTester::build_one_temporal_one_spatial_pattern(); + assert!(ast.is_some()); + assert_eq!(ast.unwrap()["type"], "AggregateExpr"); + } + + #[test] + fn pattern_builds_combined_quantile() { + let ast = PatternTester::build_combined_quantile_pattern(); + assert!(ast.is_some()); + assert_eq!(ast.unwrap()["type"], "AggregateExpr"); + } + + #[test] + fn bare_metric_classified_as_only_vector() { + let tester = PatternTester::new(); + let (cat, result) = tester.classify_query("http_requests_total").unwrap(); + assert_eq!(cat, "ONLY_VECTOR"); + assert_eq!(result.get_metric_name().unwrap(), "http_requests_total"); + } +} diff --git a/asap-common/tests/rust_pattern_matching/Cargo.lock b/asap-common/tests/rust_pattern_matching/Cargo.lock deleted file mode 100644 index a8c86c66..00000000 --- a/asap-common/tests/rust_pattern_matching/Cargo.lock +++ /dev/null @@ -1,1204 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "2.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" - -[[package]] -name = "cactus" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbc26382d871df4b7442e3df10a9402bf3cf5e55cbd66f12be38861425f0564" - -[[package]] -name = "cc" -version = "1.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" - -[[package]] -name = "cfgrammar" -version = "0.13.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe45e18904af7af10e4312df7c97251e98af98c70f42f1f2587aecfcbee56bf" -dependencies = [ - "indexmap", - "lazy_static", - "num-traits", - "regex", - "serde", - "vob", -] - -[[package]] -name = "chrono" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-link 0.2.0", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "deranged" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "filetime" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.60.2", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "getopts" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" - -[[package]] -name = "iana-time-zone" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "indexmap" -version = "2.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags", - "cfg-if", - "libc", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "js-sys" -version = "0.3.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.175" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" - -[[package]] -name = "libredox" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags", - "libc", - "redox_syscall", -] - -[[package]] -name = "lock_api" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" - -[[package]] -name = "lrlex" -version = "0.13.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71364e868116ee891b0f93559eb9eca5675bec28b22d33c58481e66c3951d7e" -dependencies = [ - "cfgrammar", - "getopts", - "lazy_static", - "lrpar", - "num-traits", - "quote", - "regex", - "regex-syntax", - "serde", - "vergen", -] - -[[package]] -name = "lrpar" -version = "0.13.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b265a81193d94c92d1c9c715498d6fa505bce3f789ceecb24ab5d6fa2dbc71" -dependencies = [ - "bincode", - "cactus", - "cfgrammar", - "filetime", - "indexmap", - "lazy_static", - "lrtable", - "num-traits", - "packedvec", - "regex", - "serde", - "static_assertions", - "vergen", - "vob", -] - -[[package]] -name = "lrtable" -version = "0.13.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc36d15214ca997a5097845be1f932b7ee6125c36f5c5e55f6c49e027ddeb6de" -dependencies = [ - "cfgrammar", - "fnv", - "num-traits", - "serde", - "sparsevec", - "vob", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.59.0", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "packedvec" -version = "1.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69e0a534dd2e6aefce319af62a0aa0066a76bdfcec0201dfe02df226bc9ec70" -dependencies = [ - "num-traits", - "serde", -] - -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "proc-macro2" -version = "1.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "promql-parser" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d851f6523a8215e2fbf86b6cef4548433f8b76092e9ffb607105de52ae63fd" -dependencies = [ - "cfgrammar", - "chrono", - "lazy_static", - "lrlex", - "lrpar", - "regex", -] - -[[package]] -name = "promql_cross_lang_tests" -version = "0.1.0" -dependencies = [ - "chrono", - "promql-parser", - "promql_utilities", - "serde", - "serde_json", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "promql_utilities" -version = "0.1.0" -dependencies = [ - "chrono", - "promql-parser", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" - -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "serde" -version = "1.0.224" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aaeb1e94f53b16384af593c71e20b095e958dab1d26939c1b70645c5cfbcc0b" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.224" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f39390fa6346e24defbcdd3d9544ba8a19985d0af74df8501fbfe9a64341ab" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.224" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ff78ab5e8561c9a675bfc1785cb07ae721f0ee53329a595cefd8c04c2ac4e0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", - "serde_core", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" -dependencies = [ - "libc", -] - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "socket2" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "sparsevec" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b4a8ce3045f0fe173fb5ae3c6b7dcfbec02bfa650bb8618b2301f52af0134d" -dependencies = [ - "num-traits", - "packedvec", - "serde", - "vob", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "syn" -version = "2.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "time" -version = "0.3.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" -dependencies = [ - "deranged", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" - -[[package]] -name = "time-macros" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tokio" -version = "1.47.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" -dependencies = [ - "backtrace", - "bytes", - "io-uring", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "slab", - "socket2", - "tokio-macros", - "windows-sys 0.59.0", -] - -[[package]] -name = "tokio-macros" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "unicode-ident" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" - -[[package]] -name = "unicode-width" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vergen" -version = "8.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" -dependencies = [ - "anyhow", - "rustversion", - "time", -] - -[[package]] -name = "vob" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc936b5a7202a703aeaf7ce05e7931db2e0c8126813f97db3e9e06d867b0bb38" -dependencies = [ - "num-traits", - "serde", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasm-bindgen" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "windows-core" -version = "0.62.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.2.0", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-link" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" - -[[package]] -name = "windows-result" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" -dependencies = [ - "windows-link 0.2.0", -] - -[[package]] -name = "windows-strings" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" -dependencies = [ - "windows-link 0.2.0", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.3", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" -dependencies = [ - "windows-link 0.1.3", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" diff --git a/asap-common/tests/rust_pattern_matching/Cargo.toml b/asap-common/tests/rust_pattern_matching/Cargo.toml deleted file mode 100644 index 571641e3..00000000 --- a/asap-common/tests/rust_pattern_matching/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[workspace] - -[package] -name = "promql_cross_lang_tests" -version = "0.1.0" -edition = "2021" - -[[bin]] -name = "test_runner" -path = "src/main.rs" - -[dependencies] -promql-parser = "0.5.0" -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } -tokio = { version = "1.0", features = ["full"] } -chrono = "0.4.41" -tracing = "0.1" -tracing-subscriber = { version = "0.3", features = ["env-filter"] } - -[dependencies.promql_utilities] -path = "../../dependencies/rs/promql_utilities" diff --git a/asap-common/tests/rust_pattern_matching/src/main.rs b/asap-common/tests/rust_pattern_matching/src/main.rs deleted file mode 100644 index 4a293522..00000000 --- a/asap-common/tests/rust_pattern_matching/src/main.rs +++ /dev/null @@ -1,156 +0,0 @@ -use promql_utilities::ast_matching::{PromQLPattern, PromQLPatternBuilder}; -use promql_utilities::query_logics::enums::QueryPatternType; -use serde_json::Value; -use std::collections::HashMap; - -// Helper functions (these would be closures or separate methods) -fn temporal_pattern( - pattern_type: &str, - blocks: &HashMap>>, -) -> PromQLPattern { - PromQLPattern::new( - blocks[pattern_type].clone(), - ) -} - -fn spatial_pattern( - pattern_type: &str, - blocks: &HashMap>>, -) -> PromQLPattern { - PromQLPattern::new( - blocks[pattern_type].clone(), - ) -} - -fn spatial_of_temporal_pattern(temporal_block: &Option>) -> PromQLPattern { - let pattern = PromQLPatternBuilder::aggregation( - vec!["sum", "count", "avg", "quantile", "min", "max"], - temporal_block.clone(), - None, - None, - None, - Some("aggregation"), - ); - PromQLPattern::new( - pattern, - ) -} - -fn main() { - let mut temporal_pattern_blocks = HashMap::new(); - temporal_pattern_blocks.insert( - "quantile".to_string(), - PromQLPatternBuilder::function( - vec!["quantile_over_time"], - vec![ - PromQLPatternBuilder::number(None, Some("quantile_param")), - PromQLPatternBuilder::matrix_selector( - PromQLPatternBuilder::metric(None, None, None, Some("metric")), - None, - Some("range_vector"), - ), - ], - Some("function"), - Some("function_args"), - ), - ); - - temporal_pattern_blocks.insert( - "generic".to_string(), - PromQLPatternBuilder::function( - vec![ - "sum_over_time", - "count_over_time", - "avg_over_time", - "min_over_time", - "max_over_time", - "increase", - "rate", - ], - vec![PromQLPatternBuilder::matrix_selector( - PromQLPatternBuilder::metric(None, None, None, Some("metric")), - None, - Some("range_vector"), - )], - Some("function"), - Some("function_args"), - ), - ); - - // Create spatial pattern blocks - let mut spatial_pattern_blocks = HashMap::new(); - spatial_pattern_blocks.insert( - "generic".to_string(), - PromQLPatternBuilder::aggregation( - vec!["sum", "count", "avg", "quantile", "min", "max"], - PromQLPatternBuilder::metric(None, None, None, Some("metric")), - None, - None, - None, - Some("aggregation"), - ), - ); - - // Create controller patterns - let mut controller_patterns = HashMap::new(); - controller_patterns.insert( - QueryPatternType::OnlyTemporal, - vec![ - temporal_pattern("quantile", &temporal_pattern_blocks), - temporal_pattern("generic", &temporal_pattern_blocks), - ], - ); - controller_patterns.insert( - QueryPatternType::OnlySpatial, - vec![spatial_pattern("generic", &spatial_pattern_blocks)], - ); - controller_patterns.insert( - QueryPatternType::OneTemporalOneSpatial, - vec![ - spatial_of_temporal_pattern(&temporal_pattern_blocks["quantile"]), - spatial_of_temporal_pattern(&temporal_pattern_blocks["generic"]), - ], - ); - - let queries = vec![ - // "sum_over_time(fake_metric_total[1m])", - // "count_over_time(fake_metric_total[1m])", - // "quantile_over_time(0.95, fake_metric_total[1m])", - // "sum by (instance, job) (fake_metric_total)", - // "count without (instance) (fake_metric_total)", - // "quantile by (instance) (0.95, fake_metric_total)", - // "sum by (instance, job) (rate(fake_metric_total[1m]))", - "sum by (instance, job) (sum_over_time(fake_metric_total[1m]))", - "sum by (instance, job) (count_over_time(fake_metric_total[1m]))", - ]; - - for query in queries { - let ast = match promql_parser::parser::parse(&query) { - Ok(parsed) => parsed, - Err(e) => { - eprintln!("Failed to parse query '{}': {}", query, e); - continue; - } - }; - - let mut found_match = None; - for (pattern_type, patterns) in &controller_patterns { - for pattern in patterns { - // println!( - // "Trying pattern type: {:?} for query: {}", - // pattern_type, query - // ); - let match_result = pattern.matches(&ast); - if match_result.matches { - println!("Query: {}; Pattern: {:?}", query, pattern_type); - println!("Match result: {:?}", match_result); - found_match = Some((*pattern_type, match_result)); - break; - } - } - if found_match.is_some() { - break; - } - } - } -} From f5c812e547e4f96e50ff4b3b443b950b9cd5c817 Mon Sep 17 00:00:00 2001 From: Milind Srivastava Date: Thu, 9 Apr 2026 12:22:04 -0400 Subject: [PATCH 2/3] fix --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0b1e9c8b..89056ff9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,6 @@ members = [ "asap-common/dependencies/rs/elastic_dsl_utilities", "asap-common/dependencies/rs/sketch_db_common", "asap-common/dependencies/rs/datafusion_summary_library", - "asap-common/tests/rust_pattern_matching", "asap-common/tests/compare_matched_tokens/rust_tests", "asap-common/tests/compare_patterns", "asap-query-engine", From a8ed78303c9db17ba4f483b9ae1a42de579d68bd Mon Sep 17 00:00:00 2001 From: Milind Srivastava Date: Thu, 9 Apr 2026 12:23:59 -0400 Subject: [PATCH 3/3] remove rust_pattern_matching from CI --- .github/workflows/correctness.yml | 6 ------ Cargo.lock | 14 -------------- 2 files changed, 20 deletions(-) diff --git a/.github/workflows/correctness.yml b/.github/workflows/correctness.yml index 7ba01784..bf9f693c 100644 --- a/.github/workflows/correctness.yml +++ b/.github/workflows/correctness.yml @@ -160,9 +160,3 @@ jobs: ~/.cargo/git target key: ${{ runner.os }}-cargo-correctness-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }} - - - name: Run Rust pattern matching tests - working-directory: asap-common/tests/rust_pattern_matching - run: cargo test --release - env: - RUSTC_WRAPPER: sccache diff --git a/Cargo.lock b/Cargo.lock index e022aa25..9042bfdd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3508,20 +3508,6 @@ dependencies = [ "regex", ] -[[package]] -name = "promql_pattern_matching_tests" -version = "0.1.0" -dependencies = [ - "chrono", - "promql-parser", - "promql_utilities", - "serde", - "serde_json", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "promql_token_matching_tests" version = "0.1.0"