int main(void)
{
    flint_rand_t state;
    slong i;

    flint_printf("partitions_fmpz_ui_threaded....");
    fflush(stdout);

    flint_randinit(state);

    flint_set_num_threads(2);

    {
        fmpz_t p;
        fmpz * v;

        fmpz_init(p);
        v = _fmpz_vec_init(NUM);

        arith_number_of_partitions_vec(v, NUM);

        for (i = 0; i < NUM; i++)
        {
            partitions_fmpz_ui(p, i);
            if (!fmpz_equal(p, v + i))
            {
                flint_printf("FAIL:\n");
                flint_printf("p(%wd) does not agree with power series\n", i);
                flint_printf("Computed p(%wd): ", i); fmpz_print(p); flint_printf("\n");
                flint_printf("Expected: "); fmpz_print(v + i); flint_printf("\n");
                abort();
            }
        }

        _fmpz_vec_clear(v, NUM);

        for (i = 0; testdata[i][0] != 0; i++)
        {
            partitions_fmpz_ui(p, testdata[i][0]);

            if (fmpz_fdiv_ui(p, 1000000000) != testdata[i][1])
            {
                flint_printf("FAIL:\n");
                flint_printf("p(%wd) does not agree with known value mod 10^9\n",
                    testdata[i][0]);
                flint_printf("Computed: %wu\n", fmpz_fdiv_ui(p, 1000000000));
                flint_printf("Expected: %wu\n", testdata[i][1]);
                abort();
            }
        }

        fmpz_clear(p);
    }

    flint_randclear(state);
    flint_cleanup();
    flint_printf("PASS\n");
    return 0;
}
int main(void)
{
    fmpz_t p;
    fmpz * v;

    slong i;

    FLINT_TEST_INIT(state);

    flint_printf("number_of_partitions....");
    fflush(stdout);    

    fmpz_init(p);
    v = _fmpz_vec_init(3000);

    arith_number_of_partitions_vec(v, 3000);

    for (i = 0; i < 3000; i++)
    {
        arith_number_of_partitions(p, i);
        if (!fmpz_equal(p, v + i))
        {
            flint_printf("FAIL:\n");
            flint_printf("p(%wd) does not agree with power series\n", i);
            flint_printf("Computed p(%wd): ", i); fmpz_print(p); flint_printf("\n");
            flint_printf("Expected: "); fmpz_print(v + i); flint_printf("\n");
            abort();
        }
    }

    _fmpz_vec_clear(v, 3000);

    for (i = 0; testdata[i][0] != 0; i++)
    {
        arith_number_of_partitions(p, testdata[i][0]);

        if (fmpz_fdiv_ui(p, 1000000000) != testdata[i][1])
        {
            flint_printf("FAIL:\n");
            flint_printf("p(%wd) does not agree with known value mod 10^9\n",
                testdata[i][0]);
            flint_printf("Computed: %wu\n", fmpz_fdiv_ui(p, 1000000000));
            flint_printf("Expected: %wu\n", testdata[i][1]);
            abort();
        }
    }

    fmpz_clear(p);

    FLINT_TEST_CLEANUP(state);
    
    flint_printf("PASS\n");
    return 0;
}