github.com/scottcagno/storage@v1.8.0/cmd/checksum/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/scottcagno/storage/pkg/util"
     6  	"hash/crc32"
     7  	"hash/crc64"
     8  	"log"
     9  )
    10  
    11  const size = 64
    12  
    13  var (
    14  	data08to16 = make([][]byte, size)
    15  	data16to32 = make([][]byte, size)
    16  	data32to64 = make([][]byte, size)
    17  )
    18  
    19  func init() {
    20  	log.Println("Filling out random data")
    21  	for i := 0; i < size; i++ {
    22  		data08to16[i] = util.RandBytes(util.RandIntn(8, 16))
    23  		data16to32[i] = util.RandBytes(util.RandIntn(16, 32))
    24  		data32to64[i] = util.RandBytes(util.RandIntn(32, 64))
    25  	}
    26  }
    27  
    28  func main() {
    29  
    30  	fmt.Println("Comparing 8-16...")
    31  	for i := 0; i < size; i++ {
    32  		s32 := ChecksumCRC32(data08to16[i])
    33  		s64 := ChecksumCRC64(data08to16[i])
    34  		fmt.Printf("crc32: %s -> %d\ncrc64: %s -> %d\n", data08to16[i], s32, data08to16[i], s64)
    35  	}
    36  	fmt.Println()
    37  
    38  	fmt.Println("Comparing 16-32...")
    39  	for i := 0; i < size; i++ {
    40  		s32 := ChecksumCRC32(data16to32[i])
    41  		s64 := ChecksumCRC64(data16to32[i])
    42  		fmt.Printf("crc32: %s -> %d\ncrc64: %s -> %d\n", data16to32[i], s32, data16to32[i], s64)
    43  	}
    44  	fmt.Println()
    45  
    46  	fmt.Println("Comparing 32-64...")
    47  	for i := 0; i < size; i++ {
    48  		s32 := ChecksumCRC32(data32to64[i])
    49  		s64 := ChecksumCRC64(data32to64[i])
    50  		fmt.Printf("crc32: %s -> %d\ncrc64: %s -> %d\n", data32to64[i], s32, data32to64[i], s64)
    51  	}
    52  	fmt.Println()
    53  }
    54  
    55  func ChecksumCRC32(data []byte) uint32 {
    56  	return crc32.Checksum(data, crc32.MakeTable(crc32.Koopman))
    57  }
    58  
    59  func ChecksumCRC64(data []byte) uint64 {
    60  	return crc64.Checksum(data, crc64.MakeTable(crc64.ECMA))
    61  }