Add Clock12Hr example

This commit is contained in:
mars 2022-03-02 10:05:19 -07:00
parent 4cd65504f2
commit 79b8b8ea3d
2 changed files with 64 additions and 0 deletions

View File

@ -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::*;

59
src/test/clock.fae Normal file
View File

@ -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)
}
}