| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package merkle |
| |
| import ( |
| "bytes" |
| "fmt" |
| "strings" |
| "testing" |
| ) |
| |
| func makeFF(n int) []byte { |
| b := make([]byte, n) |
| for i := range b { |
| b[i] = 0xff |
| } |
| return b |
| } |
| |
| var fuchsia = []byte{0xFF, 0x00, 0x80} |
| |
| func makeFuchsia() []byte { |
| b := make([]byte, 0xFF0080) |
| for i := 0; i < len(b); i += len(fuchsia) { |
| copy(b[i:], fuchsia) |
| } |
| return b |
| } |
| |
| var examples = []struct { |
| Name string |
| Input []byte |
| Output string |
| }{ |
| { |
| Name: "empty", |
| Input: []byte{}, |
| Output: "15ec7bf0b50732b49f8228e07d24365338f9e3ab994b00af08e5a3bffe55fd8b", |
| }, |
| { |
| Name: "oneblock", |
| Input: makeFF(8192), |
| Output: "68d131bc271f9c192d4f6dcd8fe61bef90004856da19d0f2f514a7f4098b0737", |
| }, |
| { |
| Name: "small", |
| Input: makeFF(65536), |
| Output: "f75f59a944d2433bc6830ec243bfefa457704d2aed12f30539cd4f18bf1d62cf", |
| }, |
| { |
| Name: "large", |
| Input: makeFF(2105344), |
| Output: "7d75dfb18bfd48e03b5be4e8e9aeea2f89880cb81c1551df855e0d0a0cc59a67", |
| }, |
| { |
| Name: "unaligned", |
| Input: makeFF(2109440), |
| Output: "7577266aa98ce587922fdc668c186e27f3c742fb1b732737153b70ae46973e43", |
| }, |
| { |
| Name: "fuchsia", |
| Input: makeFuchsia(), |
| Output: "2feb488cffc976061998ac90ce7292241dfa86883c0edc279433b5c4370d0f30", |
| }, |
| } |
| |
| func TestExamples(t *testing.T) { |
| for _, ex := range examples { |
| t.Run(ex.Name, func(t *testing.T) { |
| var tree Tree |
| _, err := tree.ReadFrom(bytes.NewReader(ex.Input)) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| got := fmt.Sprintf("%x", tree.Root()) |
| want := ex.Output |
| if strings.Compare(got, want) != 0 { |
| t.Errorf("got %q, want %q", got, want) |
| } |
| }) |
| } |
| } |