Skip to content

Commit

Permalink
Converter to_date tests coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
xavetar committed Mar 26, 2024
1 parent d147ee9 commit 8d61f4e
Show file tree
Hide file tree
Showing 6 changed files with 224 additions and 12 deletions.
6 changes: 4 additions & 2 deletions api/src/interface/date/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,10 @@ impl Date {
if !timezone_in_unix_time {
let timezone_seconds: u128 = timezone.to_seconds() as u128;

if unix_time < timezone_seconds && timezone.sign == Sign::Signed {
panic!("[ERROR]: Overflow, signed timezone override unix_time!")
if unix_time < timezone_seconds {
panic!("[OVERFLOW]: Overflow type, unix time - time zone < zero!")
} else if unix_time > u128::MAX - timezone_seconds {
panic!("[OVERFLOW]: Overflow type, unix time + time zone > type!")
}

if timezone.sign == Sign::Signed {
Expand Down
6 changes: 4 additions & 2 deletions api/src/interface/time/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,10 @@ impl Time {
if !timezone_in_unix_time {
let timezone_seconds: u128 = timezone.to_seconds() as u128;

if unix_time < timezone_seconds && timezone.sign == Sign::Signed {
panic!("[ERROR]: Overflow, signed timezone override unix_time!")
if unix_time < timezone_seconds {
panic!("[OVERFLOW]: Overflow type, unix time - time zone < zero!")
} else if unix_time > u128::MAX - timezone_seconds {
panic!("[OVERFLOW]: Overflow type, unix time + time zone > type!")
}

if timezone.sign == Sign::Signed {
Expand Down
73 changes: 71 additions & 2 deletions api/src/types/planets/earth/calendar/traits/converter/gregorian.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,84 @@ mod tests {
};

use crate::{
Months,
Sign, Zone, Months,
Solar, Julian, Gregorian,
functions::{
is_leap_year
}
};

use crate::types::{
counter::{
unix_time::{
constants::{
year::{UNIX_EPOCH_GREGORIAN_START_YEAR}
}
}
},
};

#[test]
fn test_between_date_conversion_to_gregorian() {
let mut date: Date = Date::default();

let timezone: Zone = Zone { sign: Sign::Signed, hours: 13_u8, minutes: 20_u8, seconds: 25_u8 };

let max_year_to_test: u64 = 10_000_u64;

for year in 1_u64..=max_year_to_test {
for month in [
Months::January, Months::February, Months::March, Months::April, Months::May, Months::June,
Months::July, Months::August, Months::September, Months::October, Months::November, Months::December
] {
for day in 1_u8..=month.days(is_leap_year(CalendarView::Gregorian, year)) {
if timezone.sign == Sign::Signed {
let tz_seconds: u128 = timezone.to_seconds() as u128;

(date.day, date.month, date.year, date.view) = (day, month.index(), year, CalendarView::Gregorian);
<Date as Gregorian>::to_date(&mut date, true);

if month.index() == Months::January.index() {
if year == UNIX_EPOCH_GREGORIAN_START_YEAR as u64 {
if date.unix_time < tz_seconds {
continue;
}
}
}
} else if timezone.sign == Sign::Unsigned {
let tz_seconds: u128 = timezone.to_seconds() as u128;

(date.day, date.month, date.year, date.view) = (day, month.index(), year, CalendarView::Gregorian);
<Date as Gregorian>::to_date(&mut date, true);

if date.unix_time > u128::MAX - tz_seconds {
continue;
}
}

(date.day, date.month, date.year, date.timezone, date.view) = (day, month.index(), year, timezone, CalendarView::Gregorian);
<Date as Gregorian>::to_date(&mut date, false);

let (day_tz, month_tz, year_tz, unix_time): (u8, u8, u64, u128) = (date.day, date.month, date.year, date.unix_time);

<Date as Solar>::to_date(&mut date, true);

<Date as Gregorian>::to_date(&mut date, true);
assert_eq!((date.day, date.month, date.year, date.timezone, date.unix_time, date.view), (day_tz, month_tz, year_tz, timezone, unix_time, CalendarView::Gregorian));

if !(1_u128..=JULIAN_BCE_DAYS_FIRST_YEAR).contains(&(day as u128)) || month.index() != Months::January.index() || year != 1 {
<Date as Julian>::to_date(&mut date, true);

<Date as Gregorian>::to_date(&mut date, true);
assert_eq!((date.day, date.month, date.year, date.timezone, date.unix_time, date.view), (day_tz, month_tz, year_tz, timezone, unix_time, CalendarView::Gregorian));
}
}
}
}
}

#[test]
fn test_between_presentation_conversion() {
fn test_between_presentation_conversion_to_gregorian() {
let mut date: Date = Date::default();

let max_year_to_test: u64 = 10_000_u64;
Expand Down
76 changes: 73 additions & 3 deletions api/src/types/planets/earth/calendar/traits/converter/julian.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,85 @@ mod tests {
};

use crate::{
Months,
Sign, Zone, Months,
Solar, Julian, Gregorian,
functions::{
is_leap_year
}
},
};

use crate::types::{
counter::{
unix_time::{
constants::{
year::{UNIX_EPOCH_JULIAN_START_YEAR}
}
}
},
};

#[test]
fn test_between_presentation_conversion() {
fn test_between_date_conversion_to_julian() {
let mut date: Date = Date::default();

let timezone: Zone = Zone { sign: Sign::Signed, hours: 12_u8, minutes: 30_u8, seconds: 10_u8 };

let max_year_to_test: u64 = 10_000_u64;

for year in 1_u64..=max_year_to_test {
for month in [
Months::January, Months::February, Months::March, Months::April, Months::May, Months::June,
Months::July, Months::August, Months::September, Months::October, Months::November, Months::December
] {
for day in 1_u8..=month.days(is_leap_year(CalendarView::Julian, year)) {
if !(1_u128..=JULIAN_BCE_DAYS_FIRST_YEAR).contains(&(day as u128)) || month.index() != Months::January.index() || year != 1 {

if timezone.sign == Sign::Signed {
let tz_seconds: u128 = timezone.to_seconds() as u128;

(date.day, date.month, date.year, date.view) = (day, month.index(), year, CalendarView::Julian);
<Date as Julian>::to_date(&mut date, true);

if month.index() == Months::December.index() {
if year == UNIX_EPOCH_JULIAN_START_YEAR as u64 {
if date.unix_time < tz_seconds {
continue;
}
}
}
} else if timezone.sign == Sign::Unsigned {
let tz_seconds: u128 = timezone.to_seconds() as u128;

(date.day, date.month, date.year, date.view) = (day, month.index(), year, CalendarView::Julian);
<Date as Julian>::to_date(&mut date, true);

if date.unix_time > u128::MAX - tz_seconds {
continue;
}
}

(date.day, date.month, date.year, date.timezone, date.view) = (day, month.index(), year, timezone, CalendarView::Julian);
<Date as Julian>::to_date(&mut date, false);

let (day_tz, month_tz, year_tz, unix_time): (u8, u8, u64, u128) = (date.day, date.month, date.year, date.unix_time);

<Date as Solar>::to_date(&mut date, true);

<Date as Julian>::to_date(&mut date, true);
assert_eq!((date.day, date.month, date.year, date.timezone, date.unix_time, date.view), (day_tz, month_tz, year_tz, timezone, unix_time, CalendarView::Julian));

<Date as Gregorian>::to_date(&mut date, true);

<Date as Julian>::to_date(&mut date, true);
assert_eq!((date.day, date.month, date.year, date.timezone, date.unix_time, date.view), (day_tz, month_tz, year_tz, timezone, unix_time, CalendarView::Julian));
}
}
}
}
}

#[test]
fn test_between_presentation_conversion_to_julian() {
let mut date: Date = Date::default();

let max_year_to_test: u64 = 10_000_u64;
Expand Down
73 changes: 71 additions & 2 deletions api/src/types/planets/earth/calendar/traits/converter/solar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,84 @@ mod tests {
};

use crate::{
Months,
Sign, Zone, Months,
Solar, Julian, Gregorian,
functions::{
is_leap_year
}
};

use crate::types::{
counter::{
unix_time::{
constants::{
year::{UNIX_EPOCH_SOLAR_START_YEAR}
}
}
},
};

#[test]
fn test_between_date_conversion_to_solar() {
let mut date: Date = Date::default();

let timezone: Zone = Zone { sign: Sign::Signed, hours: 0_u8, minutes: 20_u8, seconds: 55_u8 };

let max_year_to_test: u64 = 10_000_u64;

for year in 1_u64..=max_year_to_test {
for month in [
Months::January, Months::February, Months::March, Months::April, Months::May, Months::June,
Months::July, Months::August, Months::September, Months::October, Months::November, Months::December
] {
for day in 1_u8..=month.days(is_leap_year(CalendarView::Solar, year)) {
if timezone.sign == Sign::Signed {
let tz_seconds: u128 = timezone.to_seconds() as u128;

(date.day, date.month, date.year, date.view) = (day, month.index(), year, CalendarView::Solar);
<Date as Gregorian>::to_date(&mut date, true);

if month.index() == Months::January.index() {
if year == UNIX_EPOCH_SOLAR_START_YEAR as u64 {
if date.unix_time < tz_seconds {
continue;
}
}
}
} else if timezone.sign == Sign::Unsigned {
let tz_seconds: u128 = timezone.to_seconds() as u128;

(date.day, date.month, date.year, date.view) = (day, month.index(), year, CalendarView::Solar);
<Date as Gregorian>::to_date(&mut date, true);

if date.unix_time > u128::MAX - tz_seconds {
continue;
}
}

(date.day, date.month, date.year, date.timezone, date.view) = (day, month.index(), year, timezone, CalendarView::Solar);
<Date as Solar>::to_date(&mut date, false);

let (day_tz, month_tz, year_tz, unix_time): (u8, u8, u64, u128) = (date.day, date.month, date.year, date.unix_time);

if !(1_u128..=JULIAN_BCE_DAYS_FIRST_YEAR).contains(&(day as u128)) || month.index() != Months::January.index() || year != 1 {
<Date as Julian>::to_date(&mut date, true);

<Date as Solar>::to_date(&mut date, true);
assert_eq!((date.day, date.month, date.year, date.timezone, date.unix_time, date.view), (day_tz, month_tz, year_tz, timezone, unix_time, CalendarView::Solar));
}

<Date as Gregorian>::to_date(&mut date, true);

<Date as Solar>::to_date(&mut date, true);
assert_eq!((date.day, date.month, date.year, date.timezone, date.unix_time, date.view), (day_tz, month_tz, year_tz, timezone, unix_time, CalendarView::Solar));
}
}
}
}

#[test]
fn test_between_presentation_conversion() {
fn test_between_presentation_conversion_to_solar() {
let mut date: Date = Date::default();

let max_year_to_test: u64 = 10_000_u64;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ use crate::types::{
pub fn zone_recalc(timezone: Zone, unix_time: &mut u128, day_seconds: u128, era_days: &mut u128) {
let tz_sec: u128 = timezone.to_seconds() as u128;
if timezone.sign == Sign::Signed && *unix_time < tz_sec {
panic!("[ERROR]: Overflow, signed timezone override self.unix_time!!")
panic!("[OVERFLOW]: Signed timezone overflow unix_time or also can be that unix time in selected calendar system start from another date!")
} else {
if timezone.sign == Sign::Signed && tz_sec > 0 {
if day_seconds >= tz_sec {
Expand Down

0 comments on commit 8d61f4e

Please sign in to comment.