Ejemplo n.º 1
0
/*!
 * Test most of the functions that can be applied to the \c chv_t.
 *
 * Illustrates how the concept is used.
 */
int
test_chv(int little_endian_flag)
{
    chv_t chv;

    int8_t   c   = +123;
    uint8_t  uc  = -123;

    int16_t  s   = +12345;
    uint16_t us  = -12345;

    int      i   = +1234567890;
    uint     ui  = -1234567890;

    int64_t  ll  = 0x0011223344556677LL;
    uint64_t ull = 0x7766554433221100ULL;

    size_t   sz  = UINT32_MAX;

    float    f   = 1/3.0f;
    double   d   = 1/3.0;

    const char *cstr  = "pelle";
    char       *cstr1 = NULL;

#ifdef HAVE_GMP_H
    mpz_t mpz; mpz_init_set_str(mpz, "012345657890123456578901234565789012345657890123456578901234565789", 10);
    mpq_t mpq; mpq_init(mpq); mpq_set_str(mpq, "3/5", 10);
#endif

    printf("%d %u  %d %u  %d %u  %lld %llu  %zu  %g %g ",
           c, uc, s, us, i, ui, ll, ull, sz, f, d);
    printf("%s ", cstr);
    mpz_out_str (stdout, 10, mpz); printf(" ");
    mpq_out_str (stdout, 10, mpq); printf(" ");
    endline();

    chv_init(&chv);

    if (little_endian_flag) {
        chv_enc_s8(&chv, &c); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u8(&chv, &uc); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_s16le(&chv, &s); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u16le(&chv, &us); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_s32le(&chv, &i); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u32le(&chv, &ui); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_s64le(&chv, &ll); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u64le(&chv, &ull); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_sizele(&chv, &sz); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_f32le(&chv, &f); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_f64le(&chv, &d); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_cstr_lengthU32le(&chv, cstr); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
    } else {
        chv_enc_s8(&chv, &c); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u8(&chv, &uc); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_s16be(&chv, &s); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u16be(&chv, &us); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_s32be(&chv, &i); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u32be(&chv, &ui); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_s64be(&chv, &ll); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_u64be(&chv, &ull); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_sizebe(&chv, &sz); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_f32be(&chv, &f); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_enc_f64be(&chv, &d); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_enc_cstr_lengthU32be(&chv, cstr); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
    }
#ifdef HAVE_GMP_H
    chv_enc_mpz(&chv, mpz, little_endian_flag);
    chv_enc_mpq(&chv, mpq, little_endian_flag);
#endif

    chv_save(&chv, "chv_test.bin"); // save to file

    // reset variables
    c = 0; uc = 0;
    s = 0; us = 0;
    i = 0; ui = 0;
    ll = 0; ull = 0;
    f = 0; d = 0;
    cstr = NULL;
    cstr1 = NULL;
    mpz_clear(mpz);
    mpq_clear(mpq);

    // allocate variables
    mpz_init(mpz);
    mpq_init(mpq);

    chv_load(&chv, "chv_test.bin"); // load from file

    if (little_endian_flag) {
        chv_dec_s8(&chv, &c); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u8(&chv, &uc); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_s16le(&chv, &s); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u16le(&chv, &us); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_s32le(&chv, &i); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u32le(&chv, &ui); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_s64le(&chv, &ll); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u64le(&chv, &ull); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_sizele(&chv, &sz); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_f32le(&chv, &f); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_f64le(&chv, &d); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_cstr_lengthU32le(&chv, &cstr1); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
    } else {
        chv_dec_s8(&chv, &c); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u8(&chv, &uc); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_s16be(&chv, &s); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u16be(&chv, &us); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_s32be(&chv, &i); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u32be(&chv, &ui); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_s64be(&chv, &ll); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_u64be(&chv, &ull); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_sizebe(&chv, &sz); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_f32be(&chv, &f); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
        chv_dec_f64be(&chv, &d); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");

        chv_dec_cstr_lengthU32be(&chv, &cstr1); chv_fprint_x_quoted_chars(stdout, &chv); printf("\n");
    }
#ifdef HAVE_GMP_H
    chv_dec_mpz(&chv, mpz, little_endian_flag);
    chv_dec_mpq(&chv, mpq, little_endian_flag);
#endif

    printf("%d %u  %d %u  %d %u  %lld %llu  %zu  %g %g ",
           c, uc, s, us, i, ui, ll, ull, sz, f, d);
    printf("%s ", cstr1);
    mpz_out_str(stdout, 10, mpz); printf(" ");
    mpq_out_str(stdout, 10, mpq); printf(" ");
    endline();

    free(cstr1);
    mpz_clear(mpz);
    mpq_clear(mpq);

    chv_clear(&chv);

    printf("\n");

    return 0;
}
Ejemplo n.º 2
0
int chv_enc_mpq(chv_t * chv, const mpq_t a, int little_endian_flag)
{
    return (chv_enc_mpz(chv, mpq_numref(a), little_endian_flag) +
            chv_enc_mpz(chv, mpq_denref(a), little_endian_flag));
}