func (factory *regionNumericsFactory) Build() region.RegionNumerics { switch factory.desc.NumericsStrategy { case config.NativeNumericsMode: app := makeNativeRegionFacade(factory.desc, factory.baseApp, factory.provider) nativeApp := nativeregion.Make(app) return &nativeApp case config.BigFloatNumericsMode: app := makeBigRegionFacade(factory.desc, factory.baseApp, factory.provider) bigApp := bigregion.Make(app) return &bigApp default: log.Panic("Invalid NumericsStrategy", factory.desc.NumericsStrategy) return nil } }
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) } } }