public static long fingerprint64(Schema schema) {
        long fingerPrint = fingerprint64(INIT, schema.getTypeName());
        fingerPrint = fingerprint64(fingerPrint, schema.getFieldCount());
        for (FieldDescriptor descriptor : schema.getFields()) {
            fingerPrint = fingerprint64(fingerPrint, descriptor.getFieldName());
            fingerPrint = fingerprint64(fingerPrint, descriptor.getKind().getId());
        }
        return fingerPrint;
    }
@Test
    public void testRabinFingerprintIsConsistentWithWrittenData() throws IOException {
        SchemaWriter writer = new SchemaWriter("typeName");
        writer.addField(new FieldDescriptor("a", FieldKind.BOOLEAN));
        writer.addField(new FieldDescriptor("b", FieldKind.ARRAY_OF_BOOLEAN));
        writer.addField(new FieldDescriptor("c", FieldKind.TIMESTAMP_WITH_TIMEZONE));
        Schema schema = writer.build();

        InternalSerializationService internalSerializationService = new DefaultSerializationServiceBuilder()
                .setByteOrder(ByteOrder.LITTLE_ENDIAN).build();
        BufferObjectDataOutput output = internalSerializationService.createObjectDataOutput();
        schema.writeData(output);
        long fingerprint64 = RabinFingerprint.fingerprint64(output.toByteArray());
        assertEquals(fingerprint64, schema.getSchemaId());
    }