본문 바로가기
알고리즘/C++

[CLion, 백준] 알고리즘 문제 테스트 코드

by 엑츄얼리 2024. 10. 9.

소개

GoogleTest를 활용하여 작성한 코드의 다수의 테스트 케이스와 정답을 한 번에 테스트할 수 있는 프로세스

 

예를 들어, 백준 14442번 문제의 3개의 테스트 케이스를 아래와 같이 메모장에 저장 시, 일괄 테스트 가능

6 4 2
0100
1110
1000
0000
0111
0000

9

6 4 1
0100
1110
1000
0000
0111
0000

15

4 4 3
0111
1111
1111
1110

-1

테스트 결과

 

이 프로젝트가 필요한 사람들을 위해 해당 프로젝트의 깃 주소를 첨부하겠습니다.

따라서 프로젝트 구축 과정은 생략하고, 사용 방법 위주로 글을 작성하겠습니다.

프로젝트 깃 주소
https://github.com/MinKevin/-CLion-Algorithm-Test-Code/tree/v1.0.0

 

사용 방법

1. 아래 플러그인을 CLion에 설치합니다.

 

2. 문제를 풀 새로운 .cpp 파일 생성 및 algorithm-frame.h 를 구현하여 아래와 같이 작성

#pragma once
void input();

void solution();

void output();

<algorithm-frame.h>

#include "../../algorithm-frame.h"
#include <sstream>
#include <iostream>

using namespace std;

ostringstream oss;

void input() {
    oss.str("");
    oss.clear();
}

void solution() {
}

void output() {
    cout << oss.str();
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    streambuf *pCoutStreamBuf = cout.rdbuf();
    cout.rdbuf(oss.rdbuf());

    input();

    solution();

    cout.rdbuf(pCoutStreamBuf);
    output();
}

<241009-14442.cpp>

 

3. 커서가 위의 예시 파일에 있는 상태에서 New Executable C++을 통해(Alt + Shift + E 단축키) 를 통해 해당 파일이 개별적으로 실행될 수 있도록 CMakeLists.txt에 등록합니다.

29번째 줄을 확인해주세요.

add_executable의 양식은 다음과 같습니다.

add_executable({실행파일이름} {대상.cpp파일의 경로})

{대상.cpp파일의 경로}가 위의 예시 파일을 생성한 위치로 자동으로 생성되고
{실행파일이름}은 경로를 _형식으로 바꾸어서 자동 생성됩니다.

하지만 실행 파일 이름에 특수 문자나 한글이 들어가면 인코딩 문제로 프로젝트가 build되지 않습니다. (능력부족...ㅠㅠ)
따라서 이를 본인만의 룰에 따라 수정해야합니다.
저는 21~27번째 줄과 같이 {날짜-번호} 형식으로 이를 수정하겠습니다.

 

4. 상위의 {대상.cpp파일의 경로}를 복사하여 8번째 줄 "" 사이에 넣어줍니다.

8번째 줄 ""사이에 입력한 대상 파일을 테스트합니다.

다시 말해, 테스트를 원하는 파일의 경로를 ""사이에 넣어주면 됩니다. (.cpp 제외!)

 

5. Load CMake Change (Ctrl + Shift + O)를 클릭합니다.

 

6. 코드를 구현합니다.

주의사항

  • 입력(cin)은 반드시 input() 부분에서 이루어져야 합니다.

 

  • 출력(cout)또한 output() 부분에서만 이루어져야 합니다.
  • 이를 위해 ostringstream을 활용하여 solution() 내부에서의 정답 도출은 아래와 같이 ostringstream 변수인 oss로 출력을 보냅니다.
oss << answer << '\n';

 

  • 마지막으로 output() 부분에서는 oss에 저장된 스트림을 출력하기만하면 됩니다.
void output() {
    cout << oss.str();
}

 

  • 전역 변수는 다음의 예제 실행 시에 영향을 끼칩니다. 따라서 꼭 stack, queue, vector 등을 비워야합니다!

 

 

7. 대상 cpp파일과 같은 경로에 같은 이름으로 txt 파일을 생성합니다.

CMakeLists.txt 파일의 8번 째 줄의 설정을 통해 txt파일을 읽으므로, 경로와 파일이름이 반드시 일치해야합니다!

 

8. 테스트를 원하는 테스트 케이스와 정답을 공백('\n')을 통해 구분하여 입력합니다.

처음에 언급한 백준 14442번의 예제 입/출력과 비교해보시면 쉽게 이해가 가능합니다.

 

9. 상단의 runTests를 실행하여 테스트를 진행합니다.

CMakeLists.txt 를 재로딩하였다면 runTests라는 테스트 실행 설정이 생겼을 겁니다.

이를 실행하면 예제 입/출력을 한 번에 테스트 가능합니다.

 

 

이상입니다. 설명이 부족한 부분이 있었다면 댓글을 통해서 물어봐주세요!

 

댓글