summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2017-11-19 15:00:12 +0100
committerGitHub <noreply@github.com>2017-11-19 15:00:12 +0100
commit22fd8afc01a914d70fc62b34ec9a39680a93a4e9 (patch)
tree927c0954108c1d1ce7985f30e12122da6ff8b802
parent27d98f1416b879438e185368c7a1e42d1162338d (diff)
parent6794104cc456bd86a802acd82cf6651e51ed953a (diff)
Merge pull request #6 from matthiasbeyer/fix-known-offset-problem
Fix: Offset problem
-rw-r--r--README.md5
-rw-r--r--src/iter.rs67
-rw-r--r--src/parser.rs24
3 files changed, 49 insertions, 47 deletions
diff --git a/README.md b/README.md
index b064e18..0a5d012 100644
--- a/README.md
+++ b/README.md
@@ -44,11 +44,6 @@ Plus, we want to offer a string-parser which can be used to parse user input
into such things. This will be a compiletime option to include the parser or
not.
-# Known Problems
-
-* Iterators such as "today daily" start one day off. So "today daily" yields
- tomorrow as first item.
-
# License
MPL 2.0
diff --git a/src/iter.rs b/src/iter.rs
index b253f9f..85463c8 100644
--- a/src/iter.rs
+++ b/src/iter.rs
@@ -13,6 +13,7 @@ use matcher::Matcher;
pub struct Iter {
base: TimeType,
increment: TimeType,
+ had_first: bool,
}
// An iterator for creating new TimeType instances based on a base-date plus some increment value
@@ -29,8 +30,9 @@ impl Iter {
Err(KE::from_kind(KEK::ArgumentErrorNotAnAmount(inc)))
} else {
Ok(Iter {
- base: TimeType::moment(base),
- increment: inc,
+ base: TimeType::moment(base),
+ increment: inc,
+ had_first: false,
})
}
}
@@ -76,7 +78,12 @@ impl Iterator for Iter {
type Item = Result<TimeType>;
fn next(&mut self) -> Option<Self::Item> {
- Some(self.skip().map(|_| self.base.clone()))
+ if !self.had_first {
+ self.had_first = true;
+ Some(Ok(self.base.clone()))
+ } else {
+ Some(self.skip().map(|_| self.base.clone()))
+ }
}
}
@@ -428,11 +435,11 @@ pub mod extensions {
.take(5)
.collect::<Vec<_>>();
- assert_eq!(ymd_hms(2000, 1, 1, 0, 1, 0), *minutes[0].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 0, 2, 0), *minutes[1].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 0, 3, 0), *minutes[2].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 0, 4, 0), *minutes[3].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 0, 5, 0), *minutes[4].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 0, 0), *minutes[0].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 1, 0), *minutes[1].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 2, 0), *minutes[2].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 3, 0), *minutes[3].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 4, 0), *minutes[4].as_ref().unwrap());
}
#[test]
@@ -443,11 +450,11 @@ pub mod extensions {
.take(5)
.collect::<Vec<_>>();
- assert_eq!(ymd_hms(2000, 1, 1, 1, 0, 0), *minutes[0].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 2, 0, 0), *minutes[1].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 3, 0, 0), *minutes[2].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 4, 0, 0), *minutes[3].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1, 1, 5, 0, 0), *minutes[4].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 0, 0), *minutes[0].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 1, 0, 0), *minutes[1].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 2, 0, 0), *minutes[2].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 3, 0, 0), *minutes[3].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 4, 0, 0), *minutes[4].as_ref().unwrap());
}
#[test]
@@ -458,11 +465,11 @@ pub mod extensions {
.take(5)
.collect::<Vec<_>>();
- assert_eq!(ymd_hms(2000, 1, 8, 1, 0, 0), *minutes[0].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1,15, 1, 0, 0), *minutes[1].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1,22, 1, 0, 0), *minutes[2].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 1,29, 1, 0, 0), *minutes[3].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 2, 5, 1, 0, 0), *minutes[4].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 1, 0, 0), *minutes[0].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 8, 1, 0, 0), *minutes[1].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1,15, 1, 0, 0), *minutes[2].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1,22, 1, 0, 0), *minutes[3].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1,29, 1, 0, 0), *minutes[4].as_ref().unwrap());
}
#[test]
@@ -473,11 +480,11 @@ pub mod extensions {
.take(5)
.collect::<Vec<_>>();
- assert_eq!(ymd_hms(2000, 2, 1, 0, 0, 0), *minutes[0].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 3, 1, 0, 0, 0), *minutes[1].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 4, 1, 0, 0, 0), *minutes[2].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 5, 1, 0, 0, 0), *minutes[3].as_ref().unwrap());
- assert_eq!(ymd_hms(2000, 6, 1, 0, 0, 0), *minutes[4].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 0, 0), *minutes[0].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 2, 1, 0, 0, 0), *minutes[1].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 3, 1, 0, 0, 0), *minutes[2].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 4, 1, 0, 0, 0), *minutes[3].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 5, 1, 0, 0, 0), *minutes[4].as_ref().unwrap());
}
#[test]
@@ -488,11 +495,11 @@ pub mod extensions {
.take(5)
.collect::<Vec<_>>();
- assert_eq!(ymd_hms(2001, 1, 1, 0, 0, 0), *minutes[0].as_ref().unwrap());
- assert_eq!(ymd_hms(2002, 1, 1, 0, 0, 0), *minutes[1].as_ref().unwrap());
- assert_eq!(ymd_hms(2003, 1, 1, 0, 0, 0), *minutes[2].as_ref().unwrap());
- assert_eq!(ymd_hms(2004, 1, 1, 0, 0, 0), *minutes[3].as_ref().unwrap());
- assert_eq!(ymd_hms(2005, 1, 1, 0, 0, 0), *minutes[4].as_ref().unwrap());
+ assert_eq!(ymd_hms(2000, 1, 1, 0, 0, 0), *minutes[0].as_ref().unwrap());
+ assert_eq!(ymd_hms(2001, 1, 1, 0, 0, 0), *minutes[1].as_ref().unwrap());
+ assert_eq!(ymd_hms(2002, 1, 1, 0, 0, 0), *minutes[2].as_ref().unwrap());
+ assert_eq!(ymd_hms(2003, 1, 1, 0, 0, 0), *minutes[3].as_ref().unwrap());
+ assert_eq!(ymd_hms(2004, 1, 1, 0, 0, 0), *minutes[4].as_ref().unwrap());
}
}
@@ -582,7 +589,7 @@ mod test_until {
#[test]
fn test_until_1() {
- let end = (TimeType::today() + TimeType::days(2))
+ let end = (TimeType::today() + TimeType::days(1))
.calculate()
.unwrap()
.get_moment()
@@ -613,7 +620,7 @@ mod test_until {
.until(end)
.collect::<Vec<_>>();
- assert_eq!(v.len(), 48 - 1); // -1 because we do not start to iterate with 0, but 1
+ assert_eq!(v.len(), 48);
}
}
diff --git a/src/parser.rs b/src/parser.rs
index 723f4f3..5d518f5 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -785,7 +785,7 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for hour in 1..10 { // 10 is randomly chosen (fair dice roll... )
+ for hour in 0..10 { // 10 is randomly chosen (fair dice roll... )
let n = ui.next().unwrap();
assert!(n.is_ok(), "Not ok: {:#?}", n);
let tt = n.unwrap();
@@ -809,7 +809,7 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for min in (1..60).into_iter().filter(|n| n % 2 == 0) {
+ for min in (0..59).into_iter().filter(|n| n % 2 == 0) {
let n = ui.next().unwrap();
assert!(n.is_ok(), "Not ok: {:#?}", n);
let tt = n.unwrap();
@@ -833,7 +833,7 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for day in 2..30 {
+ for day in 1..29 {
let n = ui.next().unwrap();
assert!(n.is_ok(), "Not ok: {:#?}", n);
let tt = n.unwrap();
@@ -857,7 +857,7 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for week in 1..3 {
+ for week in 0..3 {
let n = ui.next().unwrap();
assert!(n.is_ok(), "Not ok: {:#?}", n);
let tt = n.unwrap();
@@ -890,8 +890,8 @@ mod tests {
let mut ui = ui.unwrap();
println!("Okay: {:#?}", ui);
- for hour in 1..10 { // 10 is randomly chosen (fair dice roll... )
- if hour > 5 - 1 {
+ for hour in 0..10 { // 10 is randomly chosen (fair dice roll... )
+ if hour > 4 {
let n = ui.next();
assert!(n.is_none(), "Is Some, should be None: {:?}", n);
return;
@@ -920,8 +920,8 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for min in (1..60).into_iter().filter(|n| n % 2 == 0) {
- if min > 10 - 1 {
+ for min in (0..60).into_iter().filter(|n| n % 2 == 0) {
+ if min > 9 {
let n = ui.next();
assert!(n.is_none(), "Is Some, should be None: {:?}", n);
return;
@@ -950,8 +950,8 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for day in 2..30 {
- if day > 5 - 1 {
+ for day in 1..30 {
+ if day > 4 {
let n = ui.next();
assert!(n.is_none(), "Is Some, should be None: {:?}", n);
return;
@@ -980,8 +980,8 @@ mod tests {
assert!(ui.is_ok(), "Not okay: {:#?}", ui);
let mut ui = ui.unwrap();
- for week in 1..3 {
- if (week * 7 + 1) > 14 {
+ for week in 0..3 {
+ if (week * 7) > 13 {
let n = ui.next();
assert!(n.is_none(), "Is Some, should be None: {:?}", n);
return;