///|
fn main raise {
  let schema = @xdr.parse_schema(
    "typedef quadruple Q; union Measurement switch (unsigned int tag) { case 4294967295: Q reading; default: void; };",
  )
  let number = @xdr.Quadruple::from_hex("3fff0000000000000000000000000000")
  let value = @xdr.VUnion(4294967295L, @xdr.VQuadruple(number))
  let wire = @xdr.encode(schema, "Measurement", value)
  assert_eq(@xdr.to_hex(wire), "ffffffff3fff0000000000000000000000000000")
  let restored = @xdr.decode(schema, "Measurement", wire)
  assert_true(@xdr.encode(schema, "Measurement", restored) == wire)
  let json = @xdr.to_json(schema, "Measurement", restored)
  let from_json = @xdr.from_json(schema, "Measurement", json)
  assert_true(@xdr.encode(schema, "Measurement", from_json) == wire)
  println("binary128 + unsigned UINT32_MAX union: " + @xdr.to_hex(wire))
  println(json.stringify())
}