ソースを参照

test cases for rand

V2Ray 10 年 前
コミット
26c040537f
3 ファイル変更78 行追加0 行削除
  1. 20 0
      math/rand_test.go
  2. 4 0
      testing/unit/assertions.go
  3. 54 0
      testing/unit/int64subject.go

+ 20 - 0
math/rand_test.go

@@ -0,0 +1,20 @@
+package math
+
+import (
+	"testing"
+	"time"
+
+	"github.com/v2ray/v2ray-core/testing/unit"
+)
+
+func TestGenerateRandomInt64InRange(t *testing.T) {
+	assert := unit.Assert(t)
+	base := time.Now().Unix()
+	delta := 100
+
+	for i := 0; i < 100; i++ {
+		v := GenerateRandomInt64InRange(base, delta)
+		assert.Int64(v).AtMost(base + int64(delta))
+		assert.Int64(v).AtLeast(base - int64(delta))
+	}
+}

+ 4 - 0
testing/unit/assertions.go

@@ -16,6 +16,10 @@ func Assert(t *testing.T) *Assertion {
 	return assert
 }
 
+func (a *Assertion) Int64(value int64) *Int64Subject {
+	return NewInt64Subject(NewSubject(a), value)
+}
+
 func (a *Assertion) Int(value int) *IntSubject {
 	return NewIntSubject(NewSubject(a), value)
 }

+ 54 - 0
testing/unit/int64subject.go

@@ -0,0 +1,54 @@
+package unit
+
+import (
+	"strconv"
+)
+
+type Int64Subject struct {
+	*Subject
+	value int64
+}
+
+func NewInt64Subject(base *Subject, value int64) *Int64Subject {
+	return &Int64Subject{
+		Subject: base,
+		value:   value,
+	}
+}
+
+func (subject *Int64Subject) Named(name string) *Int64Subject {
+	subject.Subject.Named(name)
+	return subject
+}
+
+func (subject *Int64Subject) Fail(verb string, other int64) {
+	subject.FailWithMessage("Not true that " + subject.DisplayString() + " " + verb + " <" + strconv.FormatInt(other, 10) + ">.")
+}
+
+func (subject *Int64Subject) DisplayString() string {
+	return subject.Subject.DisplayString(strconv.FormatInt(subject.value, 10))
+}
+
+func (subject *Int64Subject) Equals(expectation int64) {
+	if subject.value != expectation {
+		subject.Fail("is equal to", expectation)
+	}
+}
+
+func (subject *Int64Subject) GreaterThan(expectation int64) {
+	if subject.value <= expectation {
+		subject.Fail("is greater than", expectation)
+	}
+}
+
+func (subject *Int64Subject) AtMost(expectation int64) {
+	if subject.value > expectation {
+		subject.Fail("is at most", expectation)
+	}
+}
+
+func (subject *Int64Subject) AtLeast(expectation int64) {
+	if subject.value < expectation {
+		subject.Fail("is at least", expectation)
+	}
+}