///|
fn main raise {
  let device = @bac.Device::new(4201, "office-floor-control", 999U)
  let setpoint = @bac.ObjectId::new(2, 1)
  let temperature = @bac.ObjectId::new(0, 1)
  device.add_point(
    setpoint,
    "room-setpoint",
    Analog,
    Real(19.0F),
    commandable=true,
    units=62U,
  )
  device.add_point(
    temperature,
    "room-temperature",
    Analog,
    Real(20.2F),
    units=62U,
  )
  let server = @bac.Server::new(device)
  let client = @bac.Client::new()
  let present : @bac.PropertyRef = {
    object: setpoint,
    property: 85U,
    index: None,
  }
  @support.write(server, client, setpoint, Real(21.0F), 16, 0UL)
  @support.write(server, client, setpoint, Real(23.0F), 8, 1UL)
  @support.assert_real(@support.read(server, client, present, 2UL), 23.0F)
  @support.write(server, client, setpoint, Real(26.0F), 1, 3UL)
  @support.assert_real(@support.read(server, client, present, 4UL), 26.0F)
  @support.write(server, client, setpoint, Null, 1, 5UL)
  @support.assert_real(@support.read(server, client, present, 6UL), 23.0F)
  @support.write(server, client, setpoint, Null, 8, 7UL)
  @support.assert_real(@support.read(server, client, present, 8UL), 21.0F)
  @support.write(server, client, setpoint, Null, 16, 9UL)
  @support.assert_real(@support.read(server, client, present, 10UL), 19.0F)
  assert_eq(device.active_priority(setpoint), None)
  let slots = @support.read(
    server,
    client,
    { object: setpoint, property: 87U, index: Some(0U), },
    11UL,
  )
  assert_eq(
    @bac.encode_tags(slots),
    @bac.encode_tags([Application(Unsigned(16U))]),
  )
  device.update(temperature, 85U, Real(21.3F))
  @support.assert_real(
    @support.read(
      server,
      client,
      { object: temperature, property: 85U, index: None, },
      12UL,
    ),
    21.3F,
  )
  assert_eq(client.pending_count(), 0)
  println(
    "HVAC: schedule 16, operator 8, override 1; relinquish restores lower slots then default; sensor read passed",
  )
}