diff options
| author | Dave Henderson <dhenderson@gmail.com> | 2019-02-28 20:34:31 -0500 |
|---|---|---|
| committer | Dave Henderson <dhenderson@gmail.com> | 2019-03-17 13:00:23 -0400 |
| commit | 0347dd1f69480206fb23ff754cbf5b459bf06817 (patch) | |
| tree | 91cc47762c0cb13c53d66d969fda29c511523a5a /random/random_test.go | |
| parent | 13c1c4bf680acb6c9421c30c72ec21a626897b70 (diff) | |
New random namespace for generating random strings and numbers
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'random/random_test.go')
| -rw-r--r-- | random/random_test.go | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/random/random_test.go b/random/random_test.go new file mode 100644 index 00000000..7b6b49af --- /dev/null +++ b/random/random_test.go @@ -0,0 +1,127 @@ +package random + +import ( + "math" + "testing" + "unicode/utf8" + + "github.com/stretchr/testify/assert" +) + +func TestMatchChars(t *testing.T) { + in := "[a-g]" + expected := []rune("abcdefg") + out, err := matchChars(in) + assert.NoError(t, err) + assert.EqualValues(t, expected, out) + + in = "[a-zA-Z0-9_.-]" + expected = []rune(defaultSet) + out, err = matchChars(in) + assert.NoError(t, err) + assert.Equal(t, expected, out) + + in = "[[:alpha:]]" + expected = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") + out, err = matchChars(in) + assert.NoError(t, err) + assert.Equal(t, expected, out) +} + +func TestStringRE(t *testing.T) { + r, err := StringRE(15, "[\\p{Yi}[:alnum:]]") + assert.NoError(t, err) + assert.Equal(t, 15, utf8.RuneCountInString(r)) + + _, err = StringRE(1, "[bogus") + assert.Error(t, err) +} + +func TestStringBounds(t *testing.T) { + _, err := StringBounds(15, 0, 19) + assert.Error(t, err) + + // surrogate range isn't valid, should error + _, err = StringBounds(15, 0xd800, 0xdfff) + assert.Error(t, err) + + r, err := StringBounds(1, 'a', 'a') + assert.NoError(t, err) + assert.Equal(t, "a", r) + + r, err = StringBounds(99, 'a', 'b') + assert.NoError(t, err) + assert.Regexp(t, "^[a-b]+$", r) + + r, err = StringBounds(100, 0x0020, 0x007f) + assert.NoError(t, err) + assert.Regexp(t, "^[\u0020-\u007f]*$", r) + + // only 🂱 (\U0001F0B1) in this range is "graphic" + r, err = StringBounds(8, 0x0001f0af, 0x0001f0b1) + assert.NoError(t, err) + assert.Regexp(t, "^🂱🂱🂱🂱🂱🂱🂱🂱$", r) +} + +func TestItem(t *testing.T) { + _, err := Item(nil) + assert.Error(t, err) + + i, err := Item([]interface{}{"foo"}) + assert.NoError(t, err) + assert.Equal(t, "foo", i) + + in := []interface{}{"foo", "bar"} + got := "" + for j := 0; j < 10; j++ { + i, err = Item(in) + assert.NoError(t, err) + got += i.(string) + } + assert.NotEqual(t, "foofoofoofoofoofoofoofoofoofoo", got) + assert.NotEqual(t, "barbarbarbarbarbarbarbarbarbar", got) +} + +func TestNumber(t *testing.T) { + _, err := Number(0, -1) + assert.Error(t, err) + _, err = Number(0, math.MaxInt64) + assert.Error(t, err) + _, err = Number(math.MinInt64, 0) + assert.Error(t, err) + + testdata := []struct { + min, max, expected int64 + delta float64 + }{ + {0, 100, 50, 50}, + {0, 0, 0, 0}, + {9, 9, 9, 0}, + {-10, -10, -10, 0}, + {-10, -0, -5, 5}, + } + for _, d := range testdata { + n, err := Number(d.min, d.max) + assert.NoError(t, err) + assert.InDelta(t, d.expected, n, d.delta) + } +} + +func TestFloat(t *testing.T) { + testdata := []struct { + min, max, expected float64 + delta float64 + }{ + {0, 1.0, 0.5, 0.5}, + {0, 0.5, 0.25, 0.25}, + {490, 500, 495, 5}, + {-500, 500, 0, 500}, + {0, math.MaxFloat64, math.MaxFloat64 / 2, math.MaxFloat64 / 2}, + } + + for _, d := range testdata { + n, err := Float(d.min, d.max) + assert.NoError(t, err) + assert.InDelta(t, d.expected, n, d.delta) + } +} |
