package protocol

import "bytes"
import "testing"

func TestU8 (test *testing.T) {
	var conduit bytes.Buffer
	numbers := []uint8 { 0, 1, 255, 100, 18, 16, 127, 99 }

	for _, number := range numbers {
		err := WriteU8(&conduit, number)
		if err != nil { test.Fatal(err) }
	}

	for _, correct := range numbers {
		number, err := ReadU8(&conduit)
		if err != nil { test.Fatal(err) }
		if number != correct {
			test.Fatalf("expected %d, read back %d", correct, number)
		}
	}
}

func TestU16 (test *testing.T) {
	var conduit bytes.Buffer
	numbers := []uint16 { 0, 57, 900, 1000, 10000, 7881, 50023 }

	for _, number := range numbers {
		err := WriteU16(&conduit, number)
		if err != nil { test.Fatal(err) }
	}

	for _, correct := range numbers {
		number, err := ReadU16(&conduit)
		if err != nil { test.Fatal(err) }
		if number != correct {
			test.Fatalf("expected %d, read back %d", correct, number)
		}
	}
}


func TestU32 (test *testing.T) {
	var conduit bytes.Buffer
	numbers := []uint32 { 0, 57, 901239, 1000, 3480238490, 10000, 7881, 50023 }

	for _, number := range numbers {
		err := WriteU32(&conduit, number)
		if err != nil { test.Fatal(err) }
	}

	for _, correct := range numbers {
		number, err := ReadU32(&conduit)
		if err != nil { test.Fatal(err) }
		if number != correct {
			test.Fatalf("expected %d, read back %d", correct, number)
		}
	}
}
