// File: WShabti-Team[P]WShabtiPict/wshabtilib/junit-test-case-generator/junit-test-case-generator.cpp
// Function: method_test_case_generate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
string method_test_case_generate(string input_file_path, string method_prototype , string class_name)
{
    vector<string> method_and_values = get_method_and_values_name(method_prototype);
    string prototype_arguments = get_prototype_arguments(method_prototype);
    string method_name = method_and_values[0];

    bool interval_found = delta_check(input_file_path+"/" + method_name + "_test.csv", method_and_values.size()-1); //WARNING : DELTA CHECK PATH ISN'T THE SAME AS INPUT_FILE_PATH BECAUSE IT SEARCHES FOR THE SPECIFIC FILE [method_name]_test.csv REFERRED TO THE METHOD

    string init_of_method_test = "\n\n\t@ParameterizedTest"
                                 "\n\t@CsvFileSource(resources = \"./" + method_name + "_test.csv\")"
                                 "\n\tpublic void test_" + method_name + add_oracle_to_arguments(prototype_arguments, interval_found) + "{";
    string body_of_method_test = "\n\t\t" + class_name + " " + class_name + "Test = new " + class_name + "(/*constructor arguments*/);";
    
    string assert_of_method_test = "";

    if(interval_found)
    {
        assert_of_method_test = "\n\t\tassertEquals(oracle," + class_name + "Test."+ method_name + "(";
    }
    else
    {
        assert_of_method_test = "\n\t\tassertEquals(String.valueOf(oracle), String.valueOf(" + class_name + "Test."+ method_name + "(";
    }
    
    //ADD ARGUMENTS
    for(int i = 1; i < method_and_values.size() ; i++ )
    {
        assert_of_method_test = assert_of_method_test + method_and_values[i];
        if(i != method_and_values.size()-1)
        {
            assert_of_method_test = assert_of_method_test + ", ";
        }
    }

    if(interval_found)
    {
        assert_of_method_test = assert_of_method_test + "),delta, \""+ method_name + " FAILED\");" + "\n\t}";
    }
    else
    {
        assert_of_method_test = assert_of_method_test + ")),\""+ method_name + " FAILED\");" + "\n\t}";
    }
  
    return (init_of_method_test + body_of_method_test + assert_of_method_test);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x5b0, %rsp            # imm = 0x5B0
movq %rcx, -0x590(%rbp)
movq %rdx, -0x588(%rbp)
movq %rsi, %rax
movq -0x588(%rbp), %rsi
movq %rax, -0x580(%rbp)
movq %rdi, -0x578(%rbp)
movq %rdi, %rdx
movq %rdx, -0x570(%rbp)
movq %rdi, -0x8(%rbp)
movq %rax, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
leaq -0x58(%rbp), %rdi
movq %rdi, -0x568(%rbp)
callq 0x7270
movq -0x568(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x362a0
jmp 0x5d8fd
leaq -0x58(%rbp), %rdi
callq 0x73e0
movq -0x588(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0x7270
jmp 0x5d91b
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x36460
jmp 0x5d930
leaq -0xa8(%rbp), %rdi
callq 0x73e0
xorl %eax, %eax
movl %eax, %esi
leaq -0x38(%rbp), %rdi
callq 0x32c40
movq %rax, %rsi
leaq -0xc8(%rbp), %rdi
callq 0x7270
jmp 0x5d95a
movq -0x580(%rbp), %rsi
leaq 0x82a6(%rip), %rdx      # 0x65c0e
leaq -0x130(%rbp), %rdi
callq 0x5eaa0
jmp 0x5d976
leaq -0x110(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5ea50
jmp 0x5d992
leaq 0x8237(%rip), %rdx      # 0x65bd0
leaq -0xf0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x5ea00
jmp 0x5d9ae
leaq -0x38(%rbp), %rdi
callq 0x32c20
movl %eax, %esi
decl %esi
leaq -0xf0(%rbp), %rdi
callq 0x5d680
movb %al, -0x591(%rbp)
jmp 0x5d9cf
leaq -0xf0(%rbp), %rdi
callq 0x73e0
leaq -0x110(%rbp), %rdi
callq 0x73e0
leaq -0x130(%rbp), %rdi
callq 0x73e0
movb -0x591(%rbp), %al
andb $0x1, %al
movb %al, -0xc9(%rbp)
leaq 0x81d2(%rip), %rsi      # 0x65bda
leaq -0x1d0(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
callq 0x5ebf0
jmp 0x5da1d
leaq 0x81ec(%rip), %rdx      # 0x65c10
leaq -0x1b0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x5ea00
jmp 0x5da39
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5ea50
jmp 0x5da55
leaq -0x210(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x7270
jmp 0x5da6a
movzbl -0xc9(%rbp), %edx
andl $0x1, %edx
leaq -0x1f0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x5d4f0
jmp 0x5da89
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rsi
leaq -0x1f0(%rbp), %rdx
callq 0x5eb20
jmp 0x5daa5
leaq 0x82de(%rip), %rdx      # 0x65d8a
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x5ea00
jmp 0x5dac1
leaq -0x170(%rbp), %rdi
callq 0x73e0
leaq -0x1f0(%rbp), %rdi
callq 0x73e0
leaq -0x210(%rbp), %rdi
callq 0x73e0
leaq -0x190(%rbp), %rdi
callq 0x73e0
leaq -0x1b0(%rbp), %rdi
callq 0x73e0
leaq -0x1d0(%rbp), %rdi
callq 0x73e0
movq -0x590(%rbp), %rdx
leaq 0x8118(%rip), %rsi      # 0x65c2f
leaq -0x2d0(%rbp), %rdi
callq 0x5ebf0
jmp 0x5db25
leaq 0x8187(%rip), %rdx      # 0x65cb3
leaq -0x2b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x5ea00
jmp 0x5db41
movq -0x590(%rbp), %rdx
leaq -0x290(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x5ea50
jmp 0x5db5d
leaq 0x80cf(%rip), %rdx      # 0x65c33
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x5ea00
jmp 0x5db79
movq -0x590(%rbp), %rdx
leaq -0x250(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x5ea50
jmp 0x5db95
leaq 0x80a3(%rip), %rdx      # 0x65c3f
leaq -0x230(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x5ea00
jmp 0x5dbb1
leaq -0x250(%rbp), %rdi
callq 0x73e0
leaq -0x270(%rbp), %rdi
callq 0x73e0
leaq -0x290(%rbp), %rdi
callq 0x73e0
leaq -0x2b0(%rbp), %rdi
callq 0x73e0
leaq -0x2d0(%rbp), %rdi
callq 0x73e0
leaq -0x2f1(%rbp), %rdi
movq %rdi, -0x5a0(%rbp)
callq 0x79e0
movq -0x5a0(%rbp), %rdx
leaq 0x8024(%rip), %rsi      # 0x65c32
leaq -0x2f0(%rbp), %rdi
callq 0xd700
jmp 0x5dc1c
leaq -0x2f1(%rbp), %rdi
callq 0x7660
testb $0x1, -0xc9(%rbp)
je 0x5df5f
movq -0x590(%rbp), %rdx
leaq 0x8019(%rip), %rsi      # 0x65c5c
leaq -0x378(%rbp), %rdi
callq 0x5ebf0
jmp 0x5dc51
leaq 0x801c(%rip), %rdx      # 0x65c74
leaq -0x358(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x5ea00
jmp 0x5dc6d
leaq -0x338(%rbp), %rdi
leaq -0x358(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5ea50
jmp 0x5dc89
leaq 0x8020(%rip), %rdx      # 0x65cb0
leaq -0x318(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0x5ea00
jmp 0x5dca5
leaq -0x2f0(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x7720
leaq -0x318(%rbp), %rdi
callq 0x73e0
leaq -0x338(%rbp), %rdi
callq 0x73e0
leaq -0x358(%rbp), %rdi
callq 0x73e0
leaq -0x378(%rbp), %rdi
callq 0x73e0
jmp 0x5e065
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x73e0
jmp 0x5e46d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e464
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x73e0
jmp 0x5e464
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e458
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e44c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5dd97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5dd8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x73e0
leaq -0x110(%rbp), %rdi
callq 0x73e0
leaq -0x130(%rbp), %rdi
callq 0x73e0
jmp 0x5e44c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5de39
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5de2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5de21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5de15
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5de09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x73e0
leaq -0x1f0(%rbp), %rdi
callq 0x73e0
leaq -0x210(%rbp), %rdi
callq 0x73e0
leaq -0x190(%rbp), %rdi
callq 0x73e0
leaq -0x1b0(%rbp), %rdi
callq 0x73e0
leaq -0x1d0(%rbp), %rdi
callq 0x73e0
jmp 0x5e44c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e440
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5decf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5dec3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5deb7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5deab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x73e0
leaq -0x270(%rbp), %rdi
callq 0x73e0
leaq -0x290(%rbp), %rdi
callq 0x73e0
leaq -0x2b0(%rbp), %rdi
callq 0x73e0
leaq -0x2d0(%rbp), %rdi
callq 0x73e0
jmp 0x5e440
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2f1(%rbp), %rdi
callq 0x7660
jmp 0x5e434
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e428
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5df4e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5df42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x338(%rbp), %rdi
callq 0x73e0
leaq -0x358(%rbp), %rdi
callq 0x73e0
leaq -0x378(%rbp), %rdi
callq 0x73e0
jmp 0x5e428
movq -0x590(%rbp), %rdx
leaq 0x7d0d(%rip), %rsi      # 0x65c7a
leaq -0x3f8(%rbp), %rdi
callq 0x5ebf0
jmp 0x5df7b
leaq 0x7cf2(%rip), %rdx      # 0x65c74
leaq -0x3d8(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x5ea00
jmp 0x5df97
leaq -0x3b8(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5ea50
jmp 0x5dfb3
leaq 0x7cf6(%rip), %rdx      # 0x65cb0
leaq -0x398(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x5ea00
jmp 0x5dfcf
leaq -0x2f0(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x7720
leaq -0x398(%rbp), %rdi
callq 0x73e0
leaq -0x3b8(%rbp), %rdi
callq 0x73e0
leaq -0x3d8(%rbp), %rdi
callq 0x73e0
leaq -0x3f8(%rbp), %rdi
callq 0x73e0
jmp 0x5e065
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e054
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e048
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3b8(%rbp), %rdi
callq 0x73e0
leaq -0x3d8(%rbp), %rdi
callq 0x73e0
leaq -0x3f8(%rbp), %rdi
callq 0x73e0
jmp 0x5e428
movl $0x1, -0x3fc(%rbp)
movslq -0x3fc(%rbp), %rax
movq %rax, -0x5a8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x32c20
movq %rax, %rcx
movq -0x5a8(%rbp), %rax
cmpq %rcx, %rax
jae 0x5e15b
movslq -0x3fc(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x32c40
movq %rax, %rdx
leaq -0x420(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x5ed00
jmp 0x5e0c1
leaq -0x2f0(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x7720
leaq -0x420(%rbp), %rdi
callq 0x73e0
movslq -0x3fc(%rbp), %rax
movq %rax, -0x5b0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x32c20
movq %rax, %rcx
movq -0x5b0(%rbp), %rax
subq $0x1, %rcx
cmpq %rcx, %rax
je 0x5e145
leaq 0x7ba1(%rip), %rdx      # 0x65cb2
leaq -0x440(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x5eaa0
jmp 0x5e126
leaq -0x2f0(%rbp), %rdi
leaq -0x440(%rbp), %rsi
callq 0x7720
leaq -0x440(%rbp), %rdi
callq 0x73e0
jmp 0x5e147
movl -0x3fc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3fc(%rbp)
jmp 0x5e06f
testb $0x1, -0xc9(%rbp)
je 0x5e271
leaq 0x7b46(%rip), %rdx      # 0x65cb5
leaq -0x4c0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x5eaa0
jmp 0x5e184
leaq -0x4a0(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5ea50
jmp 0x5e1a0
leaq 0x7b19(%rip), %rdx      # 0x65cc0
leaq -0x480(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
callq 0x5ea00
jmp 0x5e1bc
leaq 0x7b08(%rip), %rdx      # 0x65ccb
leaq -0x460(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0x5ea00
jmp 0x5e1d8
leaq -0x2f0(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x7720
leaq -0x460(%rbp), %rdi
callq 0x73e0
leaq -0x480(%rbp), %rdi
callq 0x73e0
leaq -0x4a0(%rbp), %rdi
callq 0x73e0
leaq -0x4c0(%rbp), %rdi
callq 0x73e0
jmp 0x5e377
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e260
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e254
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x73e0
leaq -0x4a0(%rbp), %rdi
callq 0x73e0
leaq -0x4c0(%rbp), %rdi
callq 0x73e0
jmp 0x5e428
leaq 0x7a57(%rip), %rdx      # 0x65ccf
leaq -0x540(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x5eaa0
jmp 0x5e28d
leaq -0x520(%rbp), %rdi
leaq -0x540(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x5ea50
jmp 0x5e2a9
leaq 0x7a10(%rip), %rdx      # 0x65cc0
leaq -0x500(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x5ea00
jmp 0x5e2c5
leaq 0x79ff(%rip), %rdx      # 0x65ccb
leaq -0x4e0(%rbp), %rdi
leaq -0x500(%rbp), %rsi
callq 0x5ea00
jmp 0x5e2e1
leaq -0x2f0(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0x7720
leaq -0x4e0(%rbp), %rdi
callq 0x73e0
leaq -0x500(%rbp), %rdi
callq 0x73e0
leaq -0x520(%rbp), %rdi
callq 0x73e0
leaq -0x540(%rbp), %rdi
callq 0x73e0
jmp 0x5e377
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e366
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5e35a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x500(%rbp), %rdi
callq 0x73e0
leaq -0x520(%rbp), %rdi
callq 0x73e0
leaq -0x540(%rbp), %rdi
callq 0x73e0
jmp 0x5e428
leaq -0x560(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x230(%rbp), %rdx
callq 0x5ed00
jmp 0x5e393
movq -0x578(%rbp), %rdi
leaq -0x560(%rbp), %rsi
leaq -0x2f0(%rbp), %rdx
callq 0x5ea50
jmp 0x5e3af
leaq -0x560(%rbp), %rdi
callq 0x73e0
leaq -0x2f0(%rbp), %rdi
callq 0x73e0
leaq -0x230(%rbp), %rdi
callq 0x73e0
leaq -0x150(%rbp), %rdi
callq 0x73e0
leaq -0xc8(%rbp), %rdi
callq 0x73e0
leaq -0x88(%rbp), %rdi
callq 0x73e0
leaq -0x38(%rbp), %rdi
callq 0x32bc0
movq -0x570(%rbp), %rax
addq $0x5b0, %rsp            # imm = 0x5B0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x73e0
leaq -0x2f0(%rbp), %rdi
callq 0x73e0
leaq -0x230(%rbp), %rdi
callq 0x73e0
leaq -0x150(%rbp), %rdi
callq 0x73e0
leaq -0xc8(%rbp), %rdi
callq 0x73e0
leaq -0x88(%rbp), %rdi
callq 0x73e0
leaq -0x38(%rbp), %rdi
callq 0x32bc0
movq -0x60(%rbp), %rdi
callq 0x79d0
nopw %cs:(%rax,%rax)