Oregami
Repositories/oxedyne/fe2o3

oxedyne/fe2o3/fe2o3_datime/src/tests/sophisticated_parser_test.rs

3.9 KiB, 4 runs

created by r1870400018:8506, which is this file's identity for as long as the history lasts, whatever it is later renamed to

download · who wrote it · its history

1//! Parser tests for day incrementor and relative date expressions.
2//!
3//! [Written with AI entirely](https://need2know.ai/entirely-ai/code)\
4//! Anthropic Claude
5
6use crate::{
7 parser::Parser,
8 time::CalClockZone,
9 calendar::DayIncrementor,
10 core::Time,
11};
12
13#[test]
14fn test_sophisticated_day_incrementor_parsing() {
15 let zone = CalClockZone::utc();
16
17 // Test basic DayIncrementor expressions
18 let test_cases = [
19 "3rd Monday",
20 "second business day",
21 "last Sunday",
22 "2nd weekday before the 25th",
23 "end of the month",
24 ];
25
26 for test_case in test_cases {
27 println!("Testing: {}", test_case);
28
29 // Test DayIncrementor parsing directly
30 let incrementor = DayIncrementor::from_string(test_case);
31 assert!(incrementor.is_ok(), "Failed to parse: {}", test_case);
32
33 // Test parser integration
34 let parse_result = Parser::parse_date(test_case, zone.clone());
35 // Note: This might not fully work yet as we need CalendarDate integration
36 // but we can verify the parsing doesn't crash
37 match parse_result {
38 Ok(date) => println!("Parsed successfully: {}", date.format("yyyy-MM-dd")),
39 Err(e) => println!("Parse error (expected for now): {}", e),
40 }
41 }
42}
43
44#[test]
45fn test_sophisticated_ordinal_parsing() {
46 let zone = CalClockZone::utc();
47
48 let test_cases = [
49 "15th June 2024",
50 "third January 2024",
51 "1st of March, 2024",
52 "twenty-first of December 2024",
53 ];
54
55 for test_case in test_cases {
56 println!("Testing ordinal parsing: {}", test_case);
57
58 let parse_result = Parser::parse_date(test_case, zone.clone());
59 match parse_result {
60 Ok(date) => println!("Parsed successfully: {}", date.format("yyyy-MM-dd")),
61 Err(e) => println!("Parse error: {}", e),
62 }
63 }
64}
65
66#[test]
67fn test_sophisticated_field_swapping() {
68 let zone = CalClockZone::utc();
69
70 // Test cases that should trigger field swapping
71 let test_cases = [
72 ("25/12/2024", "2024-12-25"), // Day/month swap needed for validation
73 ("2024/25/12", "2024-12-25"), // Should swap 25 and 12
74 ];
75
76 for (input, expected_format) in test_cases {
77 println!("Testing field swapping: {} -> {}", input, expected_format);
78
79 let parse_result = Parser::parse_date(input, zone.clone());
80 match parse_result {
81 Ok(date) => {
82 let formatted = date.format("yyyy-MM-dd");
83 println!("Parsed as: {}", formatted);
84 // Note: The exact swapping logic might need refinement
85 },
86 Err(e) => println!("Parse error: {}", e),
87 }
88 }
89}
90
91#[test]
92fn test_sophisticated_relative_dates() {
93 let zone = CalClockZone::utc();
94
95 let test_cases = [
96 "today",
97 "tomorrow",
98 "yesterday",
99 ];
100
101 for test_case in test_cases {
102 println!("Testing relative date: {}", test_case);
103
104 let parse_result = Parser::parse_date(test_case, zone.clone());
105 match parse_result {
106 Ok(date) => println!("Parsed successfully: {}", date.format("yyyy-MM-dd")),
107 Err(e) => println!("Parse error: {}", e),
108 }
109 }
110}
111
112#[test]
113fn test_sophisticated_natural_language() {
114 let zone = CalClockZone::utc();
115
116 let test_cases = [
117 "15 June 2024",
118 "June 15, 2024",
119 "15/06/2024",
120 "2024-06-15",
121 "Saturday, June 15th, 2024",
122 ];
123
124 for test_case in test_cases {
125 println!("Testing natural language: {}", test_case);
126
127 let parse_result = Parser::parse_date(test_case, zone.clone());
128 match parse_result {
129 Ok(date) => println!("Parsed successfully: {}", date.format("yyyy-MM-dd")),
130 Err(e) => println!("Parse error: {}", e),
131 }
132 }
133}