~/bend-docscommunity

LAWS.bend source

LAWS.bend on the hub · documented module

# Definitional laws for Vec2.## Base F32 arithmetic is opaque to Bend's definitional equality. Therefore the# exact laws below preserve F32.add/sub/mul/dot normal forms rather than making# false claims that those primitives normalize to mathematical real arithmetic.# They still lock down constructors, projections, component placement, and the# concrete expansion of the usual vector identities.import Baseimport ./lib.bend as Vlaw make_ctor:  { V.Vec2.make(1.0, 2.0) == V.Vec2{1.0, 2.0} : V.Vec2 }law zero_ctor:  { V.Vec2.zero() == V.Vec2{0.0, 0.0} : V.Vec2 }law unit_x_ctor:  { V.Vec2.unit_x() == V.Vec2{1.0, 0.0} : V.Vec2 }law unit_y_ctor:  { V.Vec2.unit_y() == V.Vec2{0.0, 1.0} : V.Vec2 }law x_projection:  { V.Vec2.x(V.Vec2.make(3.0, 4.0)) == 3.0 : F32 }law y_projection:  { V.Vec2.y(V.Vec2.make(3.0, 4.0)) == 4.0 : F32 }# add zero, stated at the exact F32 normal form available to Base.law add_zero:  {    V.Vec2.add(V.Vec2.make(3.0, 4.0), V.Vec2.zero())      == V.Vec2{F32.add(3.0, 0.0), F32.add(4.0, 0.0)}    : V.Vec2  }# scale one, stated at the exact F32 normal form available to Base.law scale_one:  {    V.Vec2.scale(V.Vec2.make(3.0, 4.0), 1.0)      == V.Vec2{F32.mul(3.0, 1.0), F32.mul(4.0, 1.0)}    : V.Vec2  }law sub_self:  {    V.Vec2.sub(V.Vec2.make(3.0, 4.0), V.Vec2.make(3.0, 4.0))      == V.Vec2{F32.sub(3.0, 3.0), F32.sub(4.0, 4.0)}    : V.Vec2  }law dot:  {    V.Vec2.dot(V.Vec2.make(3.0, 4.0), V.Vec2.make(2.0, 5.0))      == F32.add(F32.mul(3.0, 2.0), F32.mul(4.0, 5.0))    : F32  }law length_sq:  {    V.Vec2.length_sq(V.Vec2.make(3.0, 4.0))      == F32.add(F32.mul(3.0, 3.0), F32.mul(4.0, 4.0))    : F32  }law lerp:  {    V.Vec2.lerp(V.Vec2.make(0.0, 2.0), V.Vec2.make(10.0, 6.0), 0.25)      == V.Vec2.add(        V.Vec2.make(0.0, 2.0),        V.Vec2.scale(          V.Vec2.sub(V.Vec2.make(10.0, 6.0), V.Vec2.make(0.0, 2.0)),          0.25))    : V.Vec2  }law unit_x_dot_unit_y:  {    V.Vec2.dot(V.Vec2.unit_x(), V.Vec2.unit_y())      == F32.add(F32.mul(1.0, 0.0), F32.mul(0.0, 1.0))    : F32  }