package flagutil

import (
	"testing"
)

func TestBytesSetFailure(t *testing.T) {
	f := func(value string) {
		t.Helper()
		var b Bytes
		if err := b.Set(value); err == nil {
			t.Fatalf("expecting non-nil error in b.Set(%q)", value)
		}
	}
	f("")
	f("foobar")
	f("5foobar")
	f("aKB")
	f("134xMB")
	f("2.43sdfGb")
	f("aKiB")
	f("134xMiB")
	f("2.43sdfGIb")
}

func TestBytesSetSuccess(t *testing.T) {
	f := func(value string, expectedResult int64) {
		t.Helper()
		var b Bytes
		if err := b.Set(value); err != nil {
			t.Fatalf("unexpected error in b.Set(%q): %s", value, err)
		}
		if b.N != expectedResult {
			t.Fatalf("unexpected result; got %d; want %d", b.N, expectedResult)
		}
		valueString := b.String()
		valueExpected := normalizeBytesString(value)
		if valueString != valueExpected {
			t.Fatalf("unexpected valueString; got %q; want %q", valueString, valueExpected)
		}
	}
	f("0", 0)
	f("1", 1)
	f("-1234", -1234)
	f("123.456", 123)
	f("1KiB", 1024)
	f("1.5kib", 1.5*1024)
	f("23MiB", 23*1024*1024)
	f("0.25GiB", 0.25*1024*1024*1024)
	f("1.25TiB", 1.25*1024*1024*1024*1024)
	f("1KB", 1000)
	f("1.5kb", 1.5*1000)
	f("23MB", 23*1000*1000)
	f("0.25GB", 0.25*1000*1000*1000)
	f("1.25TB", 1.25*1000*1000*1000*1000)
}