func TestBigMandelbrotSequence(t *testing.T) {
	const prec = 53
	const iterLimit = 10

	app := &bigbase.MockRenderApplication{
		MockRenderApplication: base.MockRenderApplication{
			Base: base.BaseConfig{
				DivergeLimit: 4.0,
			},
			PictureWidth:  10,
			PictureHeight: 10,
		},
	}
	app.UserMin = bigbase.MakeBigComplex(0.0, 0.0, prec)
	app.UserMax = bigbase.MakeBigComplex(10.0, 10.0, prec)
	numerics := Make(app)
	out := numerics.Sequence()

	const expectedCount = 100
	actualCount := len(out)

	if expectedCount != actualCount {
		t.Error("Expected", expectedCount, "members but there were", actualCount)
	}
}
func TestRect(t *testing.T) {
	left := -1.0
	bottom := -1.0
	right := 1.0
	top := 1.0

	app := &MockRenderApplication{}
	app.UserMin = bigbase.MakeBigComplex(left, bottom, prec)
	app.UserMax = bigbase.MakeBigComplex(right, top, prec)
	app.Prec = 53
	app.PictureWidth = 2
	app.PictureHeight = 2

	numerics := Make(app)

	expectMinX := 0
	expectMaxX := 2
	expectMinY := 0
	expectMaxY := 2

	r := numerics.Rect()

	okay := expectMinX == r.Min.X
	okay = okay && expectMaxX == r.Max.X
	okay = okay && expectMinY == r.Min.Y
	okay = okay && expectMaxY == r.Max.Y
	if !okay {
		t.Error("Rectangle had unexpected bounds", r)
	}
}
func TestBigProxySequenceClaimExtrinsics(t *testing.T) {
	const picW = 100
	const picH = 100

	app := &bigbase.MockRenderApplication{}
	app.PictureWidth = picW
	app.PictureHeight = picH
	app.UserMin = bigbase.MakeBigComplex(-2.0, -2.0, prec)
	app.UserMax = bigbase.MakeBigComplex(2.0, 2.0, prec)
	app.Prec = prec

	numerics := bigsequence.Make(app)

	min := bigbase.MakeBigComplex(-1.0, -1.0, prec)
	max := bigbase.MakeBigComplex(1.0, 1.0, prec)
	region := createBigRegion(numerics.BigBaseNumerics, min, max)

	bsnp := BigSequenceNumericsProxy{
		BigSequenceNumerics: &numerics,
		LocalRegion:         region,
	}

	bsnp.ClaimExtrinsics()

	expect := base.BaseNumerics{
		WholeWidth:  picW,
		WholeHeight: picH,
		PicXMin:     25,
		PicXMax:     75,
		PicYMin:     25,
		PicYMax:     75,
	}

	actual := bsnp.BigBaseNumerics.BaseNumerics

	if actual != expect {
		t.Error("Expected ", expect, "but received", actual)
	}
}
func TestSampleDivs(t *testing.T) {
	const pWidth = 100
	const pHeight = 100
	const iLimit = 255
	const dLimit = 1.42
	const maxRegSz = 10
	const samples = 100
	const natMin = complex(-2.0, -2.0)
	const natMax = complex(2.0, 2.0)
	const prec = 53

	bigMin := bigbase.MakeBigComplex(real(natMin), imag(natMax), prec)
	bigMax := bigbase.MakeBigComplex(real(natMax), imag(natMax), prec)

	mockBase := base.MockRenderApplication{}
	mockBase.PictureWidth = pWidth
	mockBase.PictureHeight = pHeight
	mockBase.Base.IterateLimit = iLimit
	mockBase.Base.DivergeLimit = dLimit
	mockBase.Base.FixAspect = true

	regConfig := region.RegionConfig{}
	regConfig.CollapseSize = maxRegSz
	regConfig.Samples = samples

	bigCoords := bigbase.MockBigCoordProvider{}
	bigCoords.UserMin = bigMin
	bigCoords.UserMax = bigMax
	bigCoords.Prec = prec

	// This business is over complicated
	bigProvider := region.MockRegionProvider{}
	bigProvider.RegConfig = regConfig
	bigProvider.RegionFactory = fRegFactory(func() region.RegionNumerics {
		app := &MockRenderApplication{}
		app.MockRegionProvider = bigProvider
		app.MockRenderApplication = mockBase
		app.MockBigCoordProvider = bigCoords
		bignums := Make(app)
		return &bignums
	})

	nativeCoords := nativebase.MockNativeCoordProvider{}
	nativeCoords.PlaneMin = natMin
	nativeCoords.PlaneMax = natMax

	nativeProvider := region.MockRegionProvider{}
	nativeProvider.RegConfig = regConfig
	nativeProvider.RegionFactory = fRegFactory(func() region.RegionNumerics {
		app := &nativeregion.MockRenderApplication{}
		app.MockNativeCoordProvider = nativeCoords
		app.MockRegionProvider = nativeProvider
		app.MockRenderApplication = mockBase
		natnums := nativeregion.Make(app)
		return &natnums
	})

	bReg := bigProvider.RegionFactory.Build()
	nReg := bigProvider.RegionFactory.Build()

	bich, _ := bReg.SampleDivs()
	nich, _ := nReg.SampleDivs()
	bs := slurp(bich)
	ns := slurp(nich)

	for i, bInvDiv := range bs {
		nInvDiv := ns[i]
		if bInvDiv != nInvDiv {
			t.Error("Mismatch InvDiv at sample ", i,
				"native was", nInvDiv, "but big was", bInvDiv)
		}
	}
}