Obj* c_audio_newSource(void* root, Obj** env, Obj** list) { if (length(*list) < 1 || length(*list) > 2) error("audio newSource expects 1 or 2 args"); char* filename = creo_tostring(root, env, list, 0); char* type = creo_optstring(root, env, list, 1, "static"); int err; DEFINE1(ret); if (strcmp(type, "stream") == 0) { audio_StreamSource* src = malloc(sizeof(audio_StreamSource)); err = audio_loadStream(src, filename); moduleData.audio_type = audio_type_stream; *ret = make_custom(root, src); } else if (strcmp(type, "static") == 0) { audio_StaticSource* src = malloc(sizeof(audio_StaticSource)); err = audio_loadStatic(src, filename); moduleData.audio_type = audio_type_static; *ret = make_custom(root, src); } if (err == -1) error("Could not load file: %s%s", filename, " reason: unknown file type"); if (err == 0) error("Could not load file: %s%s", filename, " reason: file does not exist"); return *ret; }
int tester() { std::vector<Scalar> bin_ref_x,bin_ref_y; make_reference(bin_ref_x,bin_ref_y); Antioch::SigmaBinConverter<std::vector<Scalar> > bin; const Scalar tol = std::numeric_limits<Scalar>::epsilon() * 10; int return_flag = 0; // 4 cases: // - custom inside ref // - ref inside custom // - custom beyond only min ref // - custom beyond only max ref for(unsigned int i = 0; i < 4; i++) { std::vector<Scalar> bin_custom_x, exact_sol_y; make_custom(i,bin_custom_x,exact_sol_y); std::vector<Scalar> bin_custom_y(bin_custom_x.size()); bin.y_on_custom_grid(bin_ref_x,bin_ref_y, bin_custom_x,bin_custom_y); for(unsigned int il = 0; il < bin_custom_x.size() - 1; il++) { const Scalar dist = (exact_sol_y[il] < tol)?std::abs(bin_custom_y[il] - exact_sol_y[il]):std::abs(bin_custom_y[il] - exact_sol_y[il])/exact_sol_y[il]; if( dist > tol ) { std::cout << std::scientific << std::setprecision(16) << "Error: Mismatch in bin values." << std::endl << "case (" << bin_custom_x[il] << ";" << bin_custom_x[il+1] << ")" << std::endl << "bin = " << bin_custom_y[il] << std::endl << "bin_exact = " << exact_sol_y[il] << std::endl << "relative error = " << dist << std::endl << "tolerance = " << tol << std::endl; return_flag = 1; } } } return return_flag; }
void onDraw(SkCanvas* canvas) override { canvas->translate(SkIntToScalar(10), SkIntToScalar(20)); const SkScalar w = SkIntToScalar(W); const SkScalar h = SkIntToScalar(H); SkMatrix m; m.setScale(SkIntToScalar(6), SkIntToScalar(6)); SkShader* s = SkShader::CreateBitmapShader(fBG, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, &m); SkPaint labelP; labelP.setAntiAlias(true); sk_tool_utils::set_portable_typeface(&labelP); labelP.setTextAlign(SkPaint::kCenter_Align); const int W = 5; SkScalar x0 = 0; SkScalar y0 = 0; for (int sourceType = 1; sourceType & kAll_SrcType; sourceType <<= 1) { SkScalar x = x0, y = y0; for (size_t i = 0; i < SK_ARRAY_COUNT(gModes); i++) { if ((gModes[i].fSourceTypeMask & sourceType) == 0) { continue; } SkAutoTUnref<SkXfermode> mode; if (gModes[i].fSourceTypeMask & kCustomMask) { mode.reset(make_custom(gModes[i].fSourceTypeMask & kCustomMask)); } else { mode.reset(SkXfermode::Create(gModes[i].fMode)); } SkRect r; r.set(x, y, x+w, y+h); SkPaint p; p.setStyle(SkPaint::kFill_Style); p.setShader(s); canvas->drawRect(r, p); canvas->saveLayer(&r, nullptr); draw_mode(canvas, mode, static_cast<SrcType>(sourceType), r.fLeft, r.fTop); canvas->restore(); r.inset(-SK_ScalarHalf, -SK_ScalarHalf); p.setStyle(SkPaint::kStroke_Style); p.setShader(nullptr); canvas->drawRect(r, p); #if 1 canvas->drawText(gModes[i].fLabel, strlen(gModes[i].fLabel), x + w/2, y - labelP.getTextSize()/2, labelP); #endif x += w + SkIntToScalar(10); if ((i % W) == W - 1) { x = x0; y += h + SkIntToScalar(30); } } if (y < 320) { if (x > x0) { y += h + SkIntToScalar(30); } y0 = y; } else { x0 += SkIntToScalar(400); y0 = 0; } } s->unref(); }
int vectester(const PairScalars& example, const std::string& testname) { typedef typename Antioch::value_type<PairScalars>::type Scalar; std::vector<Scalar> bin_ref_x,bin_ref_y; make_reference(bin_ref_x,bin_ref_y); Antioch::SigmaBinConverter<std::vector<Scalar> > bin; const Scalar tol = std::numeric_limits<Scalar>::epsilon() * 10; int return_flag = 0; #ifdef ANTIOCH_HAVE_GRVY gt.BeginTimer(testname); #endif // 2 * 2 cases: // - custom inside ref, ref inside custom // - custom beyond only min ref, custom beyond only max ref for(unsigned int i = 0; i < 2; i++) { std::vector<PairScalars> bin_custom_x, exact_sol_y; make_custom(i,example,bin_custom_x,exact_sol_y); std::vector<PairScalars> bin_custom_y(bin_custom_x.size(),Antioch::zero_clone(bin_custom_x[0])); bin.y_on_custom_grid(bin_ref_x,bin_ref_y, bin_custom_x,bin_custom_y); for(unsigned int il = 0; il < bin_custom_x.size() - 1; il++) { for (unsigned int tuple=0; tuple != ANTIOCH_N_TUPLES; ++tuple) { //tuple Scalar dist = Antioch::if_else(exact_sol_y[il][2*tuple] < tol, std::abs(bin_custom_y[il][2*tuple] - exact_sol_y[il][2*tuple]), std::abs(bin_custom_y[il][2*tuple] - exact_sol_y[il][2*tuple])/exact_sol_y[il][2*tuple]); if( dist > tol ) { std::cout << std::scientific << std::setprecision(16) << "Error: Mismatch in bin values for " << testname << std::endl << "case (" << bin_custom_x[il][2*tuple] << ";" << bin_custom_x[il + 1][2*tuple] << ")" << std::endl << "bin = " << bin_custom_y[il][2*tuple] << std::endl << "bin_exact = " << exact_sol_y[il][2*tuple] << std::endl << "relative error = " << dist << std::endl << "tolerance = " << tol << std::endl; return_flag = 1; } //tuple + 1 dist = Antioch::if_else(exact_sol_y[il][2*tuple + 1] < tol, std::abs(bin_custom_y[il][2*tuple + 1] - exact_sol_y[il][2*tuple + 1]), std::abs(bin_custom_y[il][2*tuple + 1] - exact_sol_y[il][2*tuple + 1])/exact_sol_y[il][2*tuple + 1]); if( dist > tol ) { std::cout << std::scientific << std::setprecision(16) << "Error: Mismatch in bin values for " << testname << std::endl << "case (" << bin_custom_x[il][2*tuple + 1] << ";" << bin_custom_x[il+1][2*tuple + 1] << ")" << std::endl << "bin = " << bin_custom_y[il][2*tuple + 1] << std::endl << "bin_exact = " << exact_sol_y[il][2*tuple + 1] << std::endl << "relative error = " << dist << std::endl << "tolerance = " << tol << std::endl; return_flag = 1; } } } } #ifdef ANTIOCH_HAVE_GRVY gt.EndTimer(testname); #endif return return_flag; }