public static TypeBuilder<Schema> builder() {
    return new TypeBuilder<>(new SchemaCompletion(), new NameContext());
  }
@Test
  void objectProps() {
    Schema s = SchemaBuilder.builder().intBuilder().prop("booleanProp", true).prop("intProp", Integer.MAX_VALUE)
        .prop("longProp", Long.MAX_VALUE).prop("floatProp", 1.0f).prop("doubleProp", Double.MAX_VALUE)
        .prop("byteProp", new byte[] { 0x41, 0x42, 0x43 }).prop("stringProp", "abc").endInt();

    // object properties
    assertEquals(7, s.getObjectProps().size());
    assertTrue(s.getObjectProp("booleanProp") instanceof Boolean);
    assertEquals(true, s.getObjectProp("booleanProp"));
    assertTrue(s.getObjectProp("intProp") instanceof Integer);
    assertEquals(Integer.MAX_VALUE, s.getObjectProp("intProp"));
    assertTrue(s.getObjectProp("intProp") instanceof Integer);
    assertTrue(s.getObjectProp("longProp") instanceof Long);
    assertEquals(Long.MAX_VALUE, s.getObjectProp("longProp"));
    assertTrue(s.getObjectProp("floatProp") instanceof Float);
    // float converts to double
    assertEquals(1.0f, s.getObjectProp("floatProp"));
    assertTrue(s.getObjectProp("doubleProp") instanceof Double);
    assertEquals(Double.MAX_VALUE, s.getObjectProp("doubleProp"));
    // byte[] converts to string
    assertTrue(s.getObjectProp("byteProp") instanceof byte[]);
    assertArrayEquals(new byte[] { 0x41, 0x42, 0x43 }, (byte[]) s.getObjectProp("byteProp"));
    assertTrue(s.getObjectProp("stringProp") instanceof String);
    assertEquals("abc", s.getObjectProp("stringProp"));
  }