// File: /workspace/github_cpp_makefile_star2_O2/WShabti-Team[P]WShabtiPict/wshabtilib/junit-test-case-generator/junit-test-case-generator.cpp
// Function: test_source_code_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>>, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>)
void test_source_code_generate(string input_file_path, string output_file_path, string test_class_name, vector<string> prototypes)
{
    string import_test = "import static org.junit.jupiter.api.Assertions.assertEquals;"
                         "\nimport org.junit.jupiter.params.ParameterizedTest;"
                         "\nimport org.junit.jupiter.params.provider.CsvFileSource;";
    string init_of_class = "\n\nclass " + test_class_name +"Test {";
    string end_of_class = "\n}";
    
    string test_source_code = import_test + init_of_class;
    string class_name = get_class_name(input_file_path);

    for(int i =0; i < prototypes.size(); i++)
    {
        test_source_code = test_source_code + method_test_case_generate(output_file_path, prototypes[i], class_name);
    }
    
    test_source_code = test_source_code + end_of_class;

    //CREATE .java TEST FILE
    ofstream java_test_class;
  	java_test_class.open(output_file_path + class_name + "Test.java", ios_base::out);
    java_test_class << test_source_code;
    java_test_class.close();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x368, %rsp            # imm = 0x368
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, (%rsp)
movq %rdi, %rbx
leaq 0x537a(%rip), %rsi      # 0x23c3c
leaq 0x128(%rsp), %rdi
leaq 0x168(%rsp), %rdx
callq 0x7f56
leaq 0x5406(%rip), %rsi      # 0x23ce4
leaq 0x168(%rsp), %rdi
movq %r15, %rdx
callq 0x1ed4b
leaq 0x53f8(%rip), %rdx      # 0x23ced
leaq 0x108(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x1ec6e
leaq 0x168(%rsp), %rdi
callq 0x61e0
leaq 0x53d6(%rip), %rsi      # 0x23cf4
leaq 0xe8(%rsp), %rdi
leaq 0x168(%rsp), %rdx
callq 0x7f56
leaq 0x8(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x108(%rsp), %rdx
callq 0x1edc1
leaq 0xc8(%rsp), %rdi
movq %rbx, %rsi
callq 0x65b0
leaq 0x48(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x122d0
leaq 0xc8(%rsp), %rdi
callq 0x61e0
xorl %r15d, %r15d
leaq 0x28(%rsp), %rbx
leaq 0x168(%rsp), %rbp
xorl %r12d, %r12d
movq 0x8(%r14), %rax
subq (%r14), %rax
sarq $0x5, %rax
cmpq %r12, %rax
jbe 0x1ea58
leaq 0xa8(%rsp), %rdi
movq (%rsp), %rsi
callq 0x65b0
movq (%r14), %rsi
addq %r15, %rsi
leaq 0x88(%rsp), %rdi
callq 0x65b0
leaq 0x148(%rsp), %r13
movq %r13, %rdi
leaq 0x48(%rsp), %rsi
callq 0x65b0
movq %rbx, %rdi
leaq 0xa8(%rsp), %rsi
leaq 0x88(%rsp), %rdx
movq %r13, %rcx
callq 0x1e090
movq %rbp, %rdi
leaq 0x8(%rsp), %r13
movq %r13, %rsi
movq %rbx, %rdx
callq 0x1edf9
movq %r13, %rdi
movq %rbp, %rsi
callq 0x6530
movq %rbp, %rdi
callq 0x61e0
movq %rbx, %rdi
callq 0x61e0
leaq 0x148(%rsp), %rdi
callq 0x61e0
leaq 0x88(%rsp), %rdi
callq 0x61e0
leaq 0xa8(%rsp), %rdi
callq 0x61e0
incq %r12
addq $0x20, %r15
jmp 0x1e98f
leaq 0x168(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x1edc1
leaq 0x8(%rsp), %rdi
leaq 0x168(%rsp), %rbx
movq %rbx, %rsi
callq 0x6530
movq %rbx, %rdi
callq 0x61e0
leaq 0x168(%rsp), %rdi
callq 0x66b0
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rdx
movq (%rsp), %rsi
callq 0x1edc1
leaq 0x5241(%rip), %rdx      # 0x23cf7
leaq 0x28(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x1ec6e
leaq 0x168(%rsp), %rdi
leaq 0x28(%rsp), %rsi
pushq $0x10
popq %rdx
callq 0x6200
leaq 0x28(%rsp), %rdi
callq 0x61e0
leaq 0x68(%rsp), %rdi
callq 0x61e0
leaq 0x168(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x63d0
leaq 0x168(%rsp), %rdi
callq 0x65e0
leaq 0x168(%rsp), %rdi
callq 0x6610
leaq 0x48(%rsp), %rdi
callq 0x61e0
leaq 0x8(%rsp), %rdi
callq 0x61e0
leaq 0xe8(%rsp), %rdi
callq 0x61e0
leaq 0x108(%rsp), %rdi
callq 0x61e0
leaq 0x128(%rsp), %rdi
callq 0x61e0
addq $0x368, %rsp            # imm = 0x368
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x61e0
jmp 0x1eb79
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x61e0
jmp 0x1ebd4
jmp 0x1ebd1
jmp 0x1ec28
jmp 0x1ec28
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
jmp 0x1ec30
movq %rax, %rbx
jmp 0x1ec35
movq %rax, %rbx
jmp 0x1ec3f
movq %rax, %rbx
jmp 0x1ec4c
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
jmp 0x1ec54
movq %rax, %rbx
jmp 0x1ec59
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
callq 0x6610
jmp 0x1ec2b
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x61e0
jmp 0x1ebf5
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
callq 0x61e0
jmp 0x1ec0c
movq %rax, %rbx
jmp 0x1ec19
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x61e0
leaq 0xa8(%rsp), %rdi
callq 0x61e0
jmp 0x1ec2b
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x61e0
leaq 0x8(%rsp), %rdi
callq 0x61e0
leaq 0xe8(%rsp), %rdi
callq 0x61e0
leaq 0x108(%rsp), %rdi
callq 0x61e0
leaq 0x128(%rsp), %rdi
callq 0x61e0
movq %rbx, %rdi
callq 0x66e0