Exemplo n.º 1
0
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';
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 4
0
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';
}
Exemplo n.º 5
0
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';
    }

}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}