///|
fn main {
try {
let a = @geo.Point::new(134217728.0, 134217729.0)
let b = @geo.Point::new(134217729.0, 134217730.0)
let c = @geo.Point::new(0.0, 0.0)
let ordinary = (b.x() - a.x()) * (c.y() - a.y()) -
(b.y() - a.y()) * (c.x() - a.x())
// Use the same algebraic form as the cancellation fixture.
let cancelled = a.x() * b.y() - a.y() * b.x()
let report = @geo.orientation_report(a, b, c)
assert_eq(cancelled, 0.0)
assert_eq(report.orientation, @geo.CW)
assert_eq(report.arithmetic, @geo.ExactDyadic)
println("ordinary cross product at origin: \{cancelled}")
println("translated ordinary determinant: \{ordinary}")
println("exact sign: CW; arithmetic: ExactDyadic")
} catch {
error => abort("predicate example failed: \{error}")
}
}