Gregory PetrosyanYay generics6b89b514 years agoHistory
142 lines · 3.3 KB · Go
RawDownload
// Copyright 2019 Gregory Petrosyan <gregory.petrosyan@gmail.com>//// This Source Code Form is subject to the terms of the Mozilla Public// License, v. 2.0. If a copy of the MPL was not distributed with this// file, You can obtain one at https://mozilla.org/MPL/2.0/. package rapid_test import (	"reflect"	"strconv"	"testing" 	. "pgregory.net/rapid") func TestSliceOf(t *testing.T) {	t.Parallel() 	gens := []*Generator[any]{		SliceOf(Bool()).AsAny(),		SliceOf(Byte()).AsAny(),		SliceOf(Int()).AsAny(),		SliceOf(Uint()).AsAny(),	} 	for _, g := range gens {		t.Run(g.String(), MakeCheck(func(t *T) {			v := g.Draw(t, "v")			if rv(v).Kind() != reflect.Slice {				t.Fatalf("got not a slice")			}			if rv(v).Len() == 0 {				t.Skip("empty")			}		}))	}} func TestSliceOfDistinct(t *testing.T) {	t.Parallel() 	g := SliceOfDistinct(Int(), ID[int]) 	Check(t, func(t *T) {		s := g.Draw(t, "s")		m := map[int]struct{}{}		for _, i := range s {			m[i] = struct{}{}		}		if len(m) != len(s) {			t.Fatalf("%v unique out of %v", len(m), len(s))		}	})} func TestSliceOfDistinctBy(t *testing.T) {	t.Parallel() 	g := SliceOfDistinct(Int(), func(i int) string { return strconv.Itoa(i % 5) }) 	Check(t, func(t *T) {		s := g.Draw(t, "s")		m := map[int]struct{}{}		for _, i := range s {			m[i%5] = struct{}{}		}		if len(m) != len(s) {			t.Fatalf("%v unique out of %v", len(m), len(s))		}	})} func TestMapOf(t *testing.T) {	t.Parallel() 	gens := []*Generator[any]{		MapOf(Bool(), Int()).AsAny(),		MapOf(Int(), Uint()).AsAny(),		MapOf(Uint(), SliceOf(Bool())).AsAny(),	} 	for _, g := range gens {		t.Run(g.String(), MakeCheck(func(t *T) {			v := g.Draw(t, "v")			if rv(v).Kind() != reflect.Map {				t.Fatalf("got not a map")			}			if rv(v).Len() == 0 {				t.Skip("empty")			}		}))	}} func TestMapOfValues(t *testing.T) {	t.Parallel() 	g := MapOfValues(Custom(genStruct), func(s testStruct) int { return s.x }) 	Check(t, func(t *T) {		m := g.Draw(t, "m")		for k, v := range m {			if k != v.x {				t.Fatalf("got key %v with value %v", k, v)			}		}	})} func TestCollectionLenLimits(t *testing.T) {	t.Parallel() 	genFuncs := []func(i, j int) *Generator[any]{		func(i, j int) *Generator[any] { return StringOfN(Int32Range('A', 'Z'), i, j, -1).AsAny() },		func(i, j int) *Generator[any] { return SliceOfN(Byte(), i, j).AsAny() },		func(i, j int) *Generator[any] { return SliceOfNDistinct(Byte(), i, j, ID[byte]).AsAny() },		func(i, j int) *Generator[any] {			return SliceOfNDistinct(Int(), i, j, func(n int) int { return n % j }).AsAny()		},		func(i, j int) *Generator[any] { return MapOfN(Int(), Int(), i, j).AsAny() },		func(i, j int) *Generator[any] { return MapOfNValues(Int(), i, j, ID[int]).AsAny() },		func(i, j int) *Generator[any] {			return MapOfNValues(Int(), i, j, func(n int) int { return n % j }).AsAny()		},	} 	for i, gf := range genFuncs {		t.Run(strconv.Itoa(i), MakeCheck(func(t *T) {			minLen := IntRange(0, 256).Draw(t, "minLen")			maxLen := IntMin(minLen).Draw(t, "maxLen") 			s := rv(gf(minLen, maxLen).Draw(t, "s"))			if s.Len() < minLen {				t.Fatalf("got collection of length %v with minLen %v", s.Len(), minLen)			}			if s.Len() > maxLen {				t.Fatalf("got collection of length %v with maxLen %v", s.Len(), maxLen)			}		}))	}}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t