UTBotCpp icon indicating copy to clipboard operation
UTBotCpp copied to clipboard

"pointer to pointer to function" weird behaviour [C standard test]

Open belous-dp opened this issue 3 years ago • 1 comments

Description Genereted regression test for function with pointer to pointer to function as a parameter fails.

To Reproduce Steps to reproduce the behavior:

  1. Open the 'c-example/lib/pointers/function_pointers.c" file
  2. Generate tests for the 'pointerToPointer' function:
char pointerToPointer(int (**f)(int), char x) {
    if (f[0](5) == 4) {
        return x;
    } else {
        return 'z';
    }
}

Generated tests

TEST(regression, pointerToPointer_test_1)
{
    // Construct input
    pointerToPointer_f_arg f[10];
    for (int i = 0; i < 10; i ++) {
        f[i] = *_pointerToPointer_f_stub;
    }
    char x = 'c';



    // Expected output
    char expected = 'z';

    // Trigger the function
    char actual = pointerToPointer(f, x);

    // Check results
    EXPECT_EQ(expected, actual);
}

TEST(regression, pointerToPointer_test_2)
{
    // Construct input
    pointerToPointer_f_arg f[10];
    for (int i = 0; i < 10; i ++) {
        f[i] = *_pointerToPointer_f_stub;
    }
    char x = 'b';



    // Expected output
    char expected = 'b';

    // Trigger the function
    char actual = pointerToPointer(f, x);

    // Check results
    EXPECT_EQ(expected, actual);
}

The second regression test fails:

Expected equality of these values:
  expected
    Which is: 'b' (98, 0x62)
  actual
    Which is: 'z' (122, 0x7A)

Comments Also creating array of 10 identical items and accessing only first of them looks strange and superfluously.

Environment UTBotCpp version 2022.7.0.

belous-dp avatar Jul 19 '22 14:07 belous-dp

Another sample is array-sort.c. UTBot generates number of tests, but two from regression suite fail during execution.

tyuldashev avatar Sep 06 '22 15:09 tyuldashev