package main

import "wire"
import "fmt"

import "time"

func main() {
	for idx := 0; idx < 64; idx++ {
		num := uint64(1) << uint(idx)
		encoded := make([]byte, 10)
		length := wire.Encode_uint64(num, encoded)
		decoded, _ := wire.Decode_uint64(encoded[:length])
		if decoded != num {
			panic(fmt.Sprintf("%d != %d", decoded, num))
		}
	}
	const count = 1000000
	start := time.Now()
	encoded := make([]byte, 10)
	//num := ^uint64(0) // Longest possible value for full uint64 range
	num := ^uint64(0) >> 1 // Largest positive int64 (real use case)
	//num := uint64(0) // Shortest possible value, most will be of this length
	length := wire.Encode_uint64(num, encoded)
	for idx := 0; idx < count; idx++ {
		wire.Encode_uint64(num, encoded)
	}
	timed := time.Since(start)
	fmt.Println("Ops:", count/timed.Seconds())
	fmt.Println("Time:", timed.Nanoseconds()/count)

	encoded = encoded[:length]
	start = time.Now()
	for idx := 0; idx < count; idx++ {
		wire.Decode_uint64(encoded)
	}
	timed = time.Since(start)
	fmt.Println("Ops:", count/timed.Seconds())
	fmt.Println("Time:", timed.Nanoseconds()/count)
}