diff --git a/src/parse.rs b/src/parse.rs index 39dbfe7..7dac029 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -519,6 +519,11 @@ mod tests { parse(include_str!("test/example.fae")); } + #[test] + fn clock() { + parse(include_str!("test/clock.fae")); + } + mod expr { use super::*; diff --git a/src/test/clock.fae b/src/test/clock.fae new file mode 100644 index 0000000..abd48d5 --- /dev/null +++ b/src/test/clock.fae @@ -0,0 +1,59 @@ +interface Update { + mut fn update(f64) bool; + fn display() string; +} + +struct Clock12Hr { + bool pm = true, + u8 hours = 12, + u8 minutes = 0, + u8 seconds = 0, + f64 sub = 0.0, +} + +impl Clock12Hr { + mut fn tick_seconds() { + .seconds = .seconds + 1; + if .seconds >= 60 { + .seconds = 0; + .tick_minutes(); + } + } + + mut fn tick_minutes() { + .minutes = .minutes + 1; + if .minutes >= 60 { + .minutes = 0; + .tick_hours(); + } + } + + mut fn tick_hours() { + .hours = .hours + 1; + if .hours >= 13 { + .hours = 1; + } else if hours == 12 { + .hours = not .hours; + } + } +} + +impl Clock12Hr Update { + mut fn update(f64 dt) bool { + let mut dirty = false; + + .sub = .sub + dt; + while .sub > 1.0 { + .sub = .sub - 1.0; + .tick_seconds(); + dirty = true; + } + + dirty + } + + fn display() string { + let pm = if .pm { "PM" } else { "AM" }; + "{}:{}.{} {}".format(.hours, .minutes, .seconds, pm) + } +}