Gregory PetrosyanYay generics6b89b514 years agoHistory
145 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 (	"math"	"sort"	"testing" 	. "pgregory.net/rapid") func TestFloatNoInf(t *testing.T) {	t.Parallel() 	gens := []*Generator[any]{		Float32().AsAny(),		Float32Min(0).AsAny(),		Float32Max(0).AsAny(),		Float64().AsAny(),		Float64Min(0).AsAny(),		Float64Max(0).AsAny(),	} 	for _, g := range gens {		t.Run(g.String(), MakeCheck(func(t *T) {			f := g.Draw(t, "f")			if math.IsInf(rv(f).Float(), 0) {				t.Fatalf("got infinity: %v", f)			}		}))	}} func TestFloatExamples(t *testing.T) {	gens := []*Generator[any]{		Float32().AsAny(),		Float32Min(-0.1).AsAny(),		Float32Min(1).AsAny(),		Float32Max(0.1).AsAny(),		Float32Max(2.5).AsAny(),		Float32Range(0.3, 0.30001).AsAny(),		Float32Range(0.3, 0.301).AsAny(),		Float32Range(0.3, 0.7).AsAny(),		Float32Range(math.E, math.Pi).AsAny(),		Float32Range(0, 1).AsAny(),		Float32Range(1, 2.5).AsAny(),		Float32Range(0, 100).AsAny(),		Float32Range(0, 10000).AsAny(),		Float64().AsAny(),		Float64Min(-0.1).AsAny(),		Float64Min(1).AsAny(),		Float64Max(0.1).AsAny(),		Float64Max(2.5).AsAny(),		Float64Range(0.3, 0.30000001).AsAny(),		Float64Range(0.3, 0.301).AsAny(),		Float64Range(0.3, 0.7).AsAny(),		Float64Range(math.E, math.Pi).AsAny(),		Float64Range(0, 1).AsAny(),		Float64Range(1, 2.5).AsAny(),		Float64Range(0, 100).AsAny(),		Float64Range(0, 10000).AsAny(),	} 	for _, g := range gens {		t.Run(g.String(), func(t *testing.T) {			var vals []float64			var vals32 bool			for i := 0; i < 100; i++ {				f := g.Example()				_, vals32 = f.(float32)				vals = append(vals, rv(f).Float())			}			sort.Float64s(vals) 			for _, f := range vals {				if vals32 {					t.Logf("%30g %10.3g % 5d % 20d % 16x", f, f, int(math.Log10(math.Abs(f))), int64(f), math.Float32bits(float32(f)))				} else {					t.Logf("%30g %10.3g % 5d % 20d % 16x", f, f, int(math.Log10(math.Abs(f))), int64(f), math.Float64bits(f))				}			}		})	}} func TestFloat32BoundCoverage(t *testing.T) {	t.Parallel() 	Check(t, func(t *T) {		min := Float32().Draw(t, "min")		max := Float32().Draw(t, "max")		if min > max {			min, max = max, min		} 		g := Float32Range(min, max)		var gotMin, gotMax, gotZero bool		for i := 0; i < 400; i++ {			f := g.Example(i) 			gotMin = gotMin || f == min			gotMax = gotMax || f == max			gotZero = gotZero || f == 0 			if gotMin && gotMax && (min > 0 || max < 0 || gotZero) {				return			}		} 		t.Fatalf("[%v, %v]: got min %v, got max %v, got zero %v", min, max, gotMin, gotMax, gotZero)	})} func TestFloat64BoundCoverage(t *testing.T) {	t.Parallel() 	Check(t, func(t *T) {		min := Float64().Draw(t, "min")		max := Float64().Draw(t, "max")		if min > max {			min, max = max, min		} 		g := Float64Range(min, max)		var gotMin, gotMax, gotZero bool		for i := 0; i < 400; i++ {			f := g.Example(i) 			gotMin = gotMin || f == min			gotMax = gotMax || f == max			gotZero = gotZero || f == 0 			if gotMin && gotMax && (min > 0 || max < 0 || gotZero) {				return			}		} 		t.Fatalf("[%v, %v]: got min %v, got max %v, got zero %v", min, max, gotMin, gotMax, gotZero)	})}

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