 
 #define NUMBER_OF_TESTS ((unsigned long int) 1e4)
 
-__global__ void test_kernel(bignum* dev_c, bignum* dev_a, bignum* dev_b);
+void generate_operands(bignum* host_a, bignum* host_b);
+void check_results(bignum* host_c, bignum* host_a, bignum* host_b);
+void execute_normal_addition_on_device();
+__global__ void normal_addition(bignum* dev_c, bignum* dev_a, bignum* dev_b);
 
 int main(void)
 {
-    printf("Testing inline PTX\n");
+    printf("Testing PTX\n");
 
     // host operands
     bignum* host_a = (bignum*) calloc(NUMBER_OF_TESTS, sizeof(bignum));

    cudaFree(dev_a);
    cudaFree(dev_b);
    cudaFree(dev_c);

    bool results_correct = true;
    for (int i = 0; results_correct && i < NUMBER_OF_TESTS; i++)
    {
        char* bignum_a_str = bignum_to_string(host_a[i]);

        char* gmp_bignum_c_str = mpz_get_str(NULL, 2, gmp_bignum_c);
        pad_string_with_zeros(&gmp_bignum_c_str);

        if (strcmp(gmp_bignum_c_str, bignum_c_str) != 0)
        {
            printf("incorrect calculation at iteration %d\n", i);
            results_correct = false;
