void test_poly_in_4_dim () { std::cout << "Polynomials in 4 dimensions." << '\n'; typedef BasedVectorSpace_c<VectorSpace_c<RealField,4,IdX>,Basis_c<IdX>> BasedVectorSpace; typedef MultivariatePolynomial<2,BasedVectorSpace> PolyType; PolyType::SymDual w(fill_with(0)); MultivariatePolynomial<1,BasedVectorSpace>::SymDual x(fill_with(1)); w[PolyType::SymDual::ComponentIndex(0, CheckRange::TRUE)] = 1; // x^2 w[PolyType::SymDual::ComponentIndex(1, CheckRange::TRUE)] = 0; // xy w[PolyType::SymDual::ComponentIndex(2, CheckRange::TRUE)] = 5; // y^2 w[PolyType::SymDual::ComponentIndex(3, CheckRange::TRUE)] = 2; // xz w[PolyType::SymDual::ComponentIndex(4, CheckRange::TRUE)] = 6; // yz w[PolyType::SymDual::ComponentIndex(5, CheckRange::TRUE)] = 3; // z^2 w[PolyType::SymDual::ComponentIndex(6, CheckRange::TRUE)] = 2; // xw w[PolyType::SymDual::ComponentIndex(7, CheckRange::TRUE)] = 6; // yw w[PolyType::SymDual::ComponentIndex(8, CheckRange::TRUE)] = 6; // zw w[PolyType::SymDual::ComponentIndex(9, CheckRange::TRUE)] = 3; // w^2 std::cout << FORMAT_VALUE(w) << '\n'; PolyType roly(w,MultivariatePolynomial<1,BasedVectorSpace>(x,3)); PolyType poly(fill_with(0)); poly = poly + MultivariatePolynomial<1,BasedVectorSpace>(x,3); PolyType::Vector v(tuple(1.0f,2.0f,3.0f,4.0f)); std::cout << FORMAT_VALUE(roly) << '\n'; roly.as_array().print(std::cout); std::cout << '\n'; std::cout << FORMAT_VALUE(poly) << '\n'; std::cout << FORMAT_VALUE(v) << '\n'; std::cout << FORMAT_VALUE(roly.evaluate(v)) << '\n'; std::cout << FORMAT_VALUE(poly.evaluate(v)) << '\n'; std::cout << FORMAT_VALUE((poly - roly).evaluate(v)) << '\n'; std::cout << FORMAT_VALUE((3.0f*roly).evaluate(v)) << '\n'; std::cout << FORMAT_VALUE(roly*poly) << '\n'; std::cout << FORMAT_VALUE((roly*poly).evaluate(v)) << '\n'; std::cout << '\n'; }
void test_polynomial_serialization () { std::cout << "serializing Polynomials in 4 dimensions." << '\n'; typedef BasedVectorSpace_c<VectorSpace_c<RealField,4,IdX>,Basis_c<IdX>> BasedVectorSpace; typedef MultivariatePolynomial<2,BasedVectorSpace> PolyType; PolyType::SymDual w(fill_with(0)); MultivariatePolynomial<1,BasedVectorSpace>::SymDual x(fill_with(1)); w[PolyType::SymDual::ComponentIndex(0, CheckRange::TRUE)] = 1; // x^2 w[PolyType::SymDual::ComponentIndex(1, CheckRange::TRUE)] = 0; // xy w[PolyType::SymDual::ComponentIndex(2, CheckRange::TRUE)] = 5; // y^2 w[PolyType::SymDual::ComponentIndex(3, CheckRange::TRUE)] = 2; // xz w[PolyType::SymDual::ComponentIndex(4, CheckRange::TRUE)] = 6; // yz w[PolyType::SymDual::ComponentIndex(5, CheckRange::TRUE)] = 3; // z^2 w[PolyType::SymDual::ComponentIndex(6, CheckRange::TRUE)] = 2; // xw w[PolyType::SymDual::ComponentIndex(7, CheckRange::TRUE)] = 6; // yw w[PolyType::SymDual::ComponentIndex(8, CheckRange::TRUE)] = 6; // zw w[PolyType::SymDual::ComponentIndex(9, CheckRange::TRUE)] = 3; // w^2 std::cout << FORMAT_VALUE(w) << '\n'; PolyType roly(w,MultivariatePolynomial<1,BasedVectorSpace>(x,3)); PolyType poly(Static<WithoutInitialization>::SINGLETON); poly.as_array().copy_from(roly.as_array()); std::cout << FORMAT_VALUE(roly) << '\n'; std::cout << FORMAT_VALUE(poly) << '\n'; std::cout << '\n'; }
EFI_STATUS garbage_disk(void) { struct gpt_partition_interface gparti; EFI_STATUS ret; VOID *chunk; VOID *aligned_chunk; UINTN size; ret = gpt_get_root_disk(&gparti, LOGICAL_UNIT_USER); if (EFI_ERROR(ret)) { efi_perror(ret, L"Failed to get disk information"); return ret; } size = gparti.bio->Media->BlockSize * N_BLOCK; ret = alloc_aligned(&chunk, &aligned_chunk, size, gparti.bio->Media->IoAlign); if (EFI_ERROR(ret)) { error(L"Unable to allocate the garbage chunk"); return ret; } ret = generate_random_number_chunk(aligned_chunk, size); if (EFI_ERROR(ret)) { FreePool(chunk); return ret; } ret = fill_with(gparti.bio, gparti.part.starting_lba, gparti.part.ending_lba, aligned_chunk, N_BLOCK); FreePool(chunk); return gpt_refresh(); }
void test_polynomial_multiplication () { std::cout << "Polynomial multiplication tests." << '\n'; typedef BasedVectorSpace_c<VectorSpace_c<RealField,2,IdX>,Basis_c<IdX>> BasedVectorSpace; typedef MultivariatePolynomial<1,BasedVectorSpace> PolyType; PolyType::SymDual x(fill_with(0)),y(fill_with(0)); x[PolyType::SymDual::ComponentIndex(0, CheckRange::TRUE)] = 1.0f; y[PolyType::SymDual::ComponentIndex(1, CheckRange::TRUE)] = 1.0f; PolyType IdX(x,0), IdY(y,0); std::cout << IdX << '\n'; std::cout << IdY << '\n'; std::cout << IdX*IdX << '\n'; std::cout << IdY*IdY << '\n'; std::cout << IdX*IdY << '\n'; std::cout << (IdX*IdX)*(IdY*IdY) + 3 << '\n'; std::cout << (IdX*IdY)*(IdX*IdY) << '\n'; std::cout << 17 + IdX*IdX*IdY*IdY << '\n'; }
void test_direct_sums () { typedef BasedVectorSpace_c<VectorSpace_c<RealField,3,IdX>,Basis_c<IdX>> BasedVectorSpace; typedef BasedVectorSpace_c<VectorSpace_c<RealField,1,IdX>,Basis_c<IdX>> RealLine; typedef SymmetricPowerOfBasedVectorSpace_c<2, BasedVectorSpace> SymmetricSquare; typedef DirectSumOfBasedVectorSpaces_c<UniformTyple_f<4,BasedVectorSpace>::T> PowerOfVectorSpace; typedef DirectSumOfBasedVectorSpaces_c<Typle_t<SymmetricSquare,BasedVectorSpace,RealLine>> DirectSumType; typedef ImplementationOf_t<DirectSumType, float> T; typedef ImplementationOf_t<BasedVectorSpace, float> S; typedef ImplementationOf_t<PowerOfVectorSpace, float> R; T t(fill_with(0)); S s(fill_with(0)), r(fill_with(0)); R q(fill_with(0)); for(Uint32 i = 0; i < 4; ++i) { for(S::ComponentIndex j; j.is_not_at_end(); ++j) { q.el(i)[j] = (i+1)*(j.value()+1); } } for(T::ComponentIndex i; i.is_not_at_end(); ++i) { t[i] = i.value(); } for(S::ComponentIndex i; i.is_not_at_end(); ++i) { s[i] = i.value(); r[i] = 4-i.value()*i.value(); } AbstractIndex_c<'i'> i; AbstractIndex_c<'j'> j; AbstractIndex_c<'k'> k; std::cout << FORMAT_VALUE(t) << '\n'; std::cout << FORMAT_VALUE(t.el<0>()) << '\n'; std::cout << FORMAT_VALUE(t.el<1>()) << '\n'; std::cout << FORMAT_VALUE(t.el<2>()) << '\n'; std::cout << FORMAT_VALUE(t.el<0>()(i).split(i,j*k)) << '\n'; // std::cout << FORMAT_VALUE(t.el<0>(i).split(i,j*k)) << '\n'; std::cout << FORMAT_VALUE(t.el<1>()(i)) << '\n'; // std::cout << FORMAT_VALUE(t.el<1>(i)) << '\n'; std::cout << FORMAT_VALUE(t.el<2>()(i)) << '\n'; // std::cout << FORMAT_VALUE(t.el<2>(i)) << '\n'; t.el<0>()(k) = 0.5f*(s(i)*r(j) + r(i)*s(j)).bundle(i*j,SymmetricSquare(),k); std::cout << FORMAT_VALUE(t) << '\n'; std::cout << FORMAT_VALUE(t.el<0>()) << '\n'; std::cout << FORMAT_VALUE(t.el<0>()(i).split(i,j*k)) << '\n'; // std::cout << FORMAT_VALUE(t.el<0>(i).split(i,j*k)) << '\n'; t.el<1>()(i) = s(i); std::cout << FORMAT_VALUE(t) << '\n'; std::cout << FORMAT_VALUE(t.el<1>()) << '\n'; std::cout << FORMAT_VALUE(t.el<1>()(i)) << '\n'; // std::cout << FORMAT_VALUE(t.el<1>(i)) << '\n'; std::cout << FORMAT_VALUE(q) << '\n'; for(Uint32 i = 0; i < 4; ++i) { std::cout << FORMAT_VALUE(q.el(i)) << '\n'; } }
static int output_integer(struct npr_printf_state *st, char *out, int dstcur, int dstlen, int wid, int lead_zero, signed long long v, int base, int flags, int *is_fini) { char *tmp; int i = st->num_digit; int sign; signed long long sv; unsigned long long uv; unsigned int is_signed = 0; tmp = st->dump_digit_buf; const char *n2c_table; if (flags & FLAG_UPCASE) { n2c_table = n2c_table_upper; } else { n2c_table = n2c_table_lower; } switch (st->state) { case 0: sign = 0; uv = v; sv = v; if (base == 10) { is_signed = 1; } if (is_signed && (v < 0)) { sign = 1; sv = -v; } if (v) { i=0; if (is_signed) { while (sv) { tmp[i] = n2c_table[sv%base]; i++; sv/=base; } } else { while (uv) { tmp[i] = n2c_table[uv%base]; i++; uv/=(unsigned int)base; } } } else { tmp[0] = '0'; i = 1; } st->sign = sign; st->state = 1; st->num_digit = i; /* fall through */ case 1: sign = st->sign; if (lead_zero) { if (sign) { if (dstcur==dstlen) { *is_fini = 0; return dstcur; } out[dstcur] = '-'; dstcur++; } } else { int num_space = wid-(i+sign); dstcur = fill_with(out, dstcur, dstlen, ' ', num_space, &st->char_index, is_fini); if (*is_fini == 0) { return dstcur; } } st->state = 2; /* fall */ case 2: sign = st->sign; i = st->num_digit; if ( lead_zero ) { int num_zero = wid-(i+sign); dstcur = fill_with(out, dstcur, dstlen, '0', num_zero, &st->char_index, is_fini); if (*is_fini == 0) { return dstcur; } } else { if (sign) { if (dstcur == dstlen) { *is_fini = 0; return dstcur; } out[dstcur] = '-'; dstcur++; } } st->char_index = 0; st->state = 3; case 3: i = st->num_digit; while (i > 0) { if (dstcur == dstlen) { st->num_digit = i; *is_fini = 0; return dstcur; } out[dstcur] = tmp[i-1]; i--; dstcur++; } *is_fini = 1; st->state = 0; break; } return dstcur; }
int npr_sprintf(struct npr_printf_state *st, char *dst, int dstlen, const struct npr_printf_format *formats, int nformat, const struct npr_printf_arg *args, int *is_fini) { char *d = dst; int di=0; int fi, ai = st->arg_index; *is_fini = 0; for (fi = st->format_index; fi < nformat; fi++) { const struct npr_printf_format *f = &formats[fi]; const struct npr_printf_arg *a = &args[ai]; int wid = f->u.wid; switch(f->type) { case NPR_PRINTF_STR: { const char *s = a->p; int len = a->u.si; int outlen = MAX( len, wid ); int d = outlen-len; switch (st->state) { case 0: di = fill_with(dst, di, dstlen, ' ', d, &st->char_index, is_fini); if (*is_fini == 0) goto quit; st->state = 1; /* fa */ case 1: di = dump_str(dst, di, dstlen, s, len, &st->char_index, is_fini); if (*is_fini == 0) goto quit; st->state = 0; break; } } ai++; break; #define CASE_DIGIT(casetag,type,uniontag,casttype,base,flags) \ case casetag: \ { \ type v = a->u.uniontag; \ di = output_integer(st, d, di, \ dstlen, \ wid, f->zero_fill, \ (casttype)v, base, flags, \ is_fini); \ if (*is_fini == 0) \ goto quit; \ } \ ai++; \ break; CASE_DIGIT(NPR_PRINTF_DIGIT, int, si, signed long long, 10, 0); CASE_DIGIT(NPR_PRINTF_LDIGIT, long, sl, signed long long, 10, 0); CASE_DIGIT(NPR_PRINTF_LLDIGIT, long long, sll, signed long long, 10, 0); CASE_DIGIT(NPR_PRINTF_UDIGIT, unsigned int, ui, unsigned long long, 10, 0); CASE_DIGIT(NPR_PRINTF_LUDIGIT, unsigned long, ul, unsigned long long, 10, 0); CASE_DIGIT(NPR_PRINTF_LLUDIGIT, unsigned long long, ull, unsigned long long, 10, 0); CASE_DIGIT(NPR_PRINTF_HEX, unsigned int, ui, unsigned long long, 16, FLAG_UPCASE); CASE_DIGIT(NPR_PRINTF_LHEX, unsigned long, ul, unsigned long long, 16, FLAG_UPCASE); CASE_DIGIT(NPR_PRINTF_LLHEX, unsigned long long, ull, unsigned long long, 16, FLAG_UPCASE); CASE_DIGIT(NPR_PRINTF_hex, unsigned int, ui, unsigned long long, 16, 0); CASE_DIGIT(NPR_PRINTF_lhex, unsigned long, ul, unsigned long long, 16, 0); CASE_DIGIT(NPR_PRINTF_llhex, unsigned long long, ull, unsigned long long, 16, 0); CASE_DIGIT(NPR_PRINTF_POINTER, void *, p, uintptr_t, 16, 0); case NPR_PRINTF_CHAR: { if (di >= dstlen) goto quit; dst[di] = a->u.c; di++; ai++; } break; case NPR_PRINTF_ORDINARY: { const char *s = f->u.ordinary; int len = f->zero_fill; di = dump_str(dst, di, dstlen, s, len, &st->char_index, is_fini); if (*is_fini == 0) goto quit; } break; case NPR_PRINTF_ORDINARY_CHAR: { if (di >= dstlen) goto quit; dst[di] = f->zero_fill; di++; } break; } } *is_fini = 1; quit: st->format_index = fi; st->arg_index = ai; return di; }