# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

// NOTE: the Java implementation provides a slow-but-direct implementation
// of the fingerpriting algorithm which is used to cross-check the
// "fingerprint" values below.  Thus, the Java unit-tests provide validation
// for these values, so other languages can just assume they are correct.


// 000
<<INPUT "null"
<<canonical "null"
<<fingerprint 7195948357588979594

// 001
<<INPUT {"type":"null"}
<<canonical "null"

// 002
<<INPUT "boolean"
<<canonical "boolean"
<<fingerprint -6970731678124411036

// 003
<<INPUT {"type":"boolean"}
<<canonical "boolean"

// 004
<<INPUT "int"
<<canonical "int"
<<fingerprint 8247732601305521295

// 005
<<INPUT {"type":"int"}
<<canonical "int"

// 006
<<INPUT "long"
<<canonical "long"
<<fingerprint -3434872931120570953

// 007
<<INPUT {"type":"long"}
<<canonical "long"

// 008
<<INPUT "float"
<<canonical "float"
<<fingerprint 5583340709985441680

// 009
<<INPUT {"type":"float"}
<<canonical "float"

// 010
<<INPUT "double"
<<canonical "double"
<<fingerprint -8181574048448539266

// 011
<<INPUT {"type":"double"}
<<canonical "double"

// 012
<<INPUT "bytes"
<<canonical "bytes"
<<fingerprint 5746618253357095269

// 013
<<INPUT {"type":"bytes"}
<<canonical "bytes"

// 014
<<INPUT "string"
<<canonical "string"
<<fingerprint -8142146995180207161

// 015
<<INPUT {"type":"string"}
<<canonical "string"

// 016
<<INPUT [  ]
<<canonical []
<<fingerprint -1241056759729112623

// 017
<<INPUT [ "int"  ]
<<canonical ["int"]
<<fingerprint -5232228896498058493

// 018
<<INPUT [ "int" , {"type":"boolean"} ]
<<canonical ["int","boolean"]
<<fingerprint 5392556393470105090

// 019
<<INPUT {"fields":[], "type":"record", "name":"foo"}
<<canonical {"name":"foo","type":"record","fields":[]}
<<fingerprint -4824392279771201922

// 020
<<INPUT {"fields":[], "type":"record", "name":"foo", "namespace":"x.y"}
<<canonical {"name":"x.y.foo","type":"record","fields":[]}
<<fingerprint 5916914534497305771

// 021
<<INPUT {"fields":[], "type":"record", "name":"a.b.foo", "namespace":"x.y"}
<<canonical {"name":"a.b.foo","type":"record","fields":[]}
<<fingerprint -4616218487480524110

// 022
<<INPUT {"fields":[], "type":"record", "name":"foo", "doc":"Useful info"}
<<canonical {"name":"foo","type":"record","fields":[]}
<<fingerprint -4824392279771201922

// 023
<<INPUT {"fields":[], "type":"record", "name":"foo", "aliases":["foo","bar"]}
<<canonical {"name":"foo","type":"record","fields":[]}
<<fingerprint -4824392279771201922

// 024
<<INPUT {"fields":[], "type":"record", "name":"foo", "doc":"foo", "aliases":["foo","bar"]}
<<canonical {"name":"foo","type":"record","fields":[]}
<<fingerprint -4824392279771201922

// 025
<<INPUT {"fields":[{"type":{"type":"boolean"}, "name":"f1"}], "type":"record", "name":"foo"}
<<canonical {"name":"foo","type":"record","fields":[{"name":"f1","type":"boolean"}]}
<<fingerprint 7843277075252814651

// 026
<<INPUT
{ "fields":[{"type":"boolean", "aliases":[], "name":"f1", "default":true},
            {"order":"descending","name":"f2","doc":"Hello","type":"int"}],
  "type":"record", "name":"foo"
}
INPUT
<<canonical {"name":"foo","type":"record","fields":[{"name":"f1","type":"boolean"},{"name":"f2","type":"int"}]}
<<fingerprint -4860222112080293046

// 027
<<INPUT {"type":"enum", "name":"foo", "symbols":["A1"]}
<<canonical {"name":"foo","type":"enum","symbols":["A1"]}
<<fingerprint -6342190197741309591

// 028
<<INPUT {"namespace":"x.y.z", "type":"enum", "name":"foo", "doc":"foo bar", "symbols":["A1", "A2"]}
<<canonical {"name":"x.y.z.foo","type":"enum","symbols":["A1","A2"]}
<<fingerprint -4448647247586288245

// 029
// <<INPUT {"type":"fixed", "name":"foo", "size":015} -- Avro parser broken???
<<INPUT {"name":"foo","type":"fixed","size":15}
<<canonical {"name":"foo","type":"fixed","size":15}
<<fingerprint 1756455273707447556

// 030
<<INPUT {"namespace":"x.y.z", "type":"fixed", "name":"foo", "doc":"foo bar", "size":32}
<<canonical {"name":"x.y.z.foo","type":"fixed","size":32}
<<fingerprint -3064184465700546786

// 031
<<INPUT { "items":{"type":"null"}, "type":"array"}
<<canonical {"type":"array","items":"null"}
<<fingerprint -589620603366471059

// 032
<<INPUT { "values":"string", "type":"map"}
<<canonical {"type":"map","values":"string"}
<<fingerprint -8732877298790414990

// 033
<<INPUT
  {"name":"PigValue","type":"record",
   "fields":[{"name":"value", "type":["null", "int", "long", "PigValue"]}]}
INPUT
<<canonical {"name":"PigValue","type":"record","fields":[{"name":"value","type":["null","int","long","PigValue"]}]}
<<fingerprint -1759257747318642341
