SlideShare a Scribd company logo
1 of 44
Download to read offline
구글 테스트
데브루키 스터디
발표자 느루
구글에서 어떻게 테스트
하는가?
…는 아니고 구글에서 만든 테스트
프레임워크를 소개하고 사용 후
느낀 점을 공유하고자 합니다
오늘 발표 내용은…
- 구글에서 만든 C++
테스트 프레임워크
- 단위 테스트, 통합 테스트,
시나리오 테스트 가능
- 구글에서도 쓴다(중요)
(크롬, Protocol Buffer 등)
Google Test?
- 소스 코드의 특정 모듈이 의도된
대로 정확히 작동하는지 검증하는
절차
- 모든 함수와 메소드에 대한 테스트
케이스(Test case)를 작성한다
단위 테스트
- 단위 테스트에서 확장된 것
- 둘 이상의 모듈을 하나의
그룹으로 테스트 하는 것
통합 테스트
- 문제점 발견이 쉽다
- 변경이 쉽다
- 통합이 간단하다
단위 테스트를 해야하는 이유
출처 : 위키
- Cpp Unit
- Google Test
테스트 도구(C++)
- A rich set of assertions
- User-defined assertions
- Death tests
- Fatal and non-fatal failures
특징
- Value-parameterized tests
- Type-parameterized tests
- Various options for running
the tests
- XML test report generation
특징
- 하나의 테스트는 다른 테스트와
독립되어 있고 반복 가능하다
- 실제 사용하는 것처럼 테스트 케이스
그룹을 만들 수 있어서 코드 파악에
도움이 된다
Google Test를
사용하게 된 이유?
- 플랫폼 중립적이라서 재사용이
용이하다
- 하나의 테스트 케이스를 실패해도 전체
테스트를 계속 진행할 수 있기 때문에
한번의 실행으로 여러 실패를 파악할
수 있다
Google Test를
사용하게 된 이유?
- 사용자가 사용할 테스트를 일일이
지정해주지 않아도 알아서 찾아준다
- 반복적으로 쓰이는 자원을 테스트끼리
공유할 수 있도록 있기 때문에 비용을
줄일 수 있다
Google Test를
사용하게 된 이유?
출처 : 공식 홈페이지
- 손목이 안 좋아져서
테스트 할 때 마우스를
적게 사용하고 싶었음
- 회사에서
사용하게 되었다
Google Test를
사용하게 된 이유? 사실…
TEST(테스트 그룹 이름,
그룹 내 하위 테스트 이름) {
/// 테스트 수행 내용
}
이렇게 선언을 해두면 자동으로
프로그램 수행 시 실행될 테스트로
등록된다
사용법 – 테스트 케이스
- 테스트가 수행되는 순서는 랜덤이다
- 테스트를 사용하지 않을 경우에는
앞에 DISABLED_ 키워드를
붙인다
- 필터로 원하는 테스트만 수행 가능
–gtest_filter
사용법 – 테스트 케이스
- 결과가 참인지 아닌지 확인한다
- 결과는 성공, 심각하지 않은 실패,
심각한 실패 3가지가 있다
- 매크로처럼 사용
사용법 - Assertions
- ASSERT_* : 조건문이 참이 아닐
경우 실패를 출력하고 현재 테스
트를 종료
- EXPECT_* : 조건문이 참이 아닐
경우 실패를 출력하고 다음 테스
트를 계속 진행
사용법 - Assertions
- ASSERT_TRUE(condition);
ASSERT_EQ(val1,val2);
ASSERT_STREQ(str1,str2);
TEST(FactorialTest,
HandlesZeroInput) {
EXPECT_EQ(1, Factorial(0));
}
사용법 - Assertions
- 여러 테스트에서 공통으로
사용하는 객체설정을 정의
- ::testing::Test 를 상속받아서
사용한다
사용법 – Test Fixtures
SetUp()
- 테스트에 필요한 설정을 세팅한다
- 각각의 테스트 케이스가 시작되기
전에 호출된다
사용법 – Test Fixtures
TearDown()
- 테스트에 사용한 자원들을
해제할 때 사용한다
- 각각의 테스트 케이스가 끝날 때
호출된다
사용법 – Test Fixtures
Class MyFixture : public testing::Test
{
Public:
User m_pUser*;
MyFixture();
~MyFixture();
virtual void SetUp();
virtual void TearDown();
}
사용법 – Test Fixtures
void MyFixture ::SetUp()
{
InitailizeUser();
}
void MyFixture ::TearDown()
{
m_pUser->CleanUp();
}
사용법 – Test Fixtures
TEST_F(MyFixture, 사용 테스트) {
m_pUser->SetMoney(100);
EXPECT_EQ(100,
m_pUser->GetMoney());
m_pUser->ConsumeMoney(5);
EXPECT_EQ(95,
m_pUser->GetMoney());
}
TEST_F(MyFixture, 획득 테스트) {
m_pUser->GetMoney(50);
EXPECT_EQ(50,
m_pUser->GetMoney());
}
사용법 – Test Fixtures
- Visual Studio .NET 2003 이상
이어야 한다
- https://github.com/google/go
ogletest 에서 프로젝트를
다운받는다
프로젝트에 적용하는 법
- 프로젝트 폴더에 압축을 푼다
프로젝트에 적용하는 법
- googletestmsvcgtest.sln
파일을 열고 빌드한다
프로젝트에 적용하는 법
프로젝트에 적용하는 법
프로젝트에 적용하는 법
프로젝트에 적용하는 법
코드 작성
코드 작성
코드 작성
실행 결과
- 프로젝트 시작과 함께 사용한 게
아니라 중간에 사용하게 되었다
-> 현재 작업 중인 기능들만 조금씩
테스트 코드를 작성
구글 테스트를 쓰게
되었을 때의 상황
- 테스트 메소드 내에 PC와
통신하는 기능이 존재
-> dummy socket 클래스를
정의하여 사용
구글 테스트를 쓰게
되었을 때의 상황
FixtureClass::CreateUser()
{
m_pUser->Initialize(
new DummySocket());
}
DummSocket::Send(){ return; }
구글 테스트를 쓰게
되었을 때의 상황
m_pUser->ProcFinishGame(…);
EXPECT_EQ(m_pUser->GetLastError(),
ret::invalid_game_id);
m_pUser->ProcFinishGame(…);
EXPECT_EQ(m_pUser->GetLastError(),
ret::success);
구글 테스트를 쓰게
되었을 때의 상황
- DB와 통신하는 부분 존재
-> DB는 항상 결과가 맞다고
생각하고 DB로 부터 받은 결과를
갱신하는 부분이 제대로 되는지
검사
구글 테스트를 쓰게
되었을 때의 상황
DBResultPacket.m_nTotalMoney = 100;
DBResultPacket.m_nLevel = 2;
m_pUser
->DBProcFinishGame(DBResultPacket);
EXPECT_EQ(m_pUser->GetMoney(),
DBResultPacket.m_nTotalMoney);
EXPECT_EQ(m_pUser->GetLevel(),
DBResultPacket.m_nLevel);
구글 테스트를 쓰게
되었을 때의 상황
- 구현 전에 단위 테스트 시나리오
를 먼저 생각하고 구현한다면
발코딩?을 줄일 수 있을 것 같다
라고 생각하지만 현실은…
- 기능을 좀 더 분리해서 만들게
된다
해보고 느낀 점
- 코드를 변경하면 테스트 코드도
변경 해줘야 한다
- 테스트 코드를 다 통과해도
버그가 없는 건 아니더라…
- Private 코드는 어떻게 테스트
해야 좋을까?
해보고 느낀 점
- 손목에 부담이 덜 해졌다
- 시간이 충분하지 않으면 못 하겠다
- 습관을 들이기 위한 노력이
필요할 것 같다
아직 안됨…
해보고 느낀 점
https://ko.wikipedia.org/wiki/%EC
%9C%A0%EB%8B%9B_%ED%
85%8C%EC%8A%A4%ED%8A
%B8
https://github.com/google/googlet
est
http://www.slideshare.net/parkpd/
kgc2010
http://www.slideshare.net/zone00
00/c-7522148
참고 링크

More Related Content

What's hot

Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps Hitesh-Java
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Olve Maudal
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux IntroductionNikolaus Graf
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design PatternsLilia Sfaxi
 
Solid C++ by Example
Solid C++ by ExampleSolid C++ by Example
Solid C++ by ExampleOlve Maudal
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first stepsRenato Primavera
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event HandlingWebStackAcademy
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 

What's hot (20)

Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)Modern C++ Explained: Move Semantics (Feb 2018)
Modern C++ Explained: Move Semantics (Feb 2018)
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
JavaScript Inheritance
JavaScript InheritanceJavaScript Inheritance
JavaScript Inheritance
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Introduction to Redux
Introduction to ReduxIntroduction to Redux
Introduction to Redux
 
JUnit 5
JUnit 5JUnit 5
JUnit 5
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
Solid C++ by Example
Solid C++ by ExampleSolid C++ by Example
Solid C++ by Example
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Javascript
JavascriptJavascript
Javascript
 
Clean code slide
Clean code slideClean code slide
Clean code slide
 
C# Access modifiers
C# Access modifiersC# Access modifiers
C# Access modifiers
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event Handling
 
Spring boot
Spring bootSpring boot
Spring boot
 
React js
React jsReact js
React js
 
Collections in-csharp
Collections in-csharpCollections in-csharp
Collections in-csharp
 

Viewers also liked

C++ Unit Test with Google Testing Framework
C++ Unit Test with Google Testing FrameworkC++ Unit Test with Google Testing Framework
C++ Unit Test with Google Testing FrameworkHumberto Marchezi
 
How Google Tests Software (구글의 소프트웨어 테스팅)
How Google Tests Software (구글의 소프트웨어 테스팅)How Google Tests Software (구글의 소프트웨어 테스팅)
How Google Tests Software (구글의 소프트웨어 테스팅)Ye Joo Park
 
Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Andrea Francia
 
Benefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldBenefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldDror Helper
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
Rundeck's History and Future
Rundeck's History and FutureRundeck's History and Future
Rundeck's History and Futuredev2ops
 
How do I do DevOps when all I have is Ops?
How do I do DevOps when all I have is Ops?How do I do DevOps when all I have is Ops?
How do I do DevOps when all I have is Ops?Chris Swan
 
How will DevOps benefit enterprise?
How will DevOps benefit enterprise? How will DevOps benefit enterprise?
How will DevOps benefit enterprise? InterQuest Group
 
OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기Seunghwa Song
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트YongEun Choi
 

Viewers also liked (12)

C++ Unit Test with Google Testing Framework
C++ Unit Test with Google Testing FrameworkC++ Unit Test with Google Testing Framework
C++ Unit Test with Google Testing Framework
 
How Google Tests Software (구글의 소프트웨어 테스팅)
How Google Tests Software (구글의 소프트웨어 테스팅)How Google Tests Software (구글의 소프트웨어 테스팅)
How Google Tests Software (구글의 소프트웨어 테스팅)
 
Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008
 
Benefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldBenefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real World
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
Rundeck's History and Future
Rundeck's History and FutureRundeck's History and Future
Rundeck's History and Future
 
How do I do DevOps when all I have is Ops?
How do I do DevOps when all I have is Ops?How do I do DevOps when all I have is Ops?
How do I do DevOps when all I have is Ops?
 
How will DevOps benefit enterprise?
How will DevOps benefit enterprise? How will DevOps benefit enterprise?
How will DevOps benefit enterprise?
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
 
OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 

Similar to 구글테스트

JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개Hyunil Shin
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentChangHyeon Bae
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드SangIn Choung
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블YongEun Choi
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)SangIn Choung
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙Hong Hyo Sang
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
 
Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Hyosang Hong
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9명환 안
 

Similar to 구글테스트 (20)

JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개JUnit 지원 라이브러리 소개
JUnit 지원 라이브러리 소개
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
Android unit testing
Android unit testingAndroid unit testing
Android unit testing
 
Unit Test With J Unit
Unit Test With J UnitUnit Test With J Unit
Unit Test With J Unit
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
 
Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙
 
TDD with JUnit 2
TDD with JUnit 2TDD with JUnit 2
TDD with JUnit 2
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9
 

More from 진화 손

C++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdfC++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdf진화 손
 
C++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdfC++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdf진화 손
 
C++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templatesC++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templates진화 손
 
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...진화 손
 
C++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functionsC++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functions진화 손
 
C++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdfC++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdf진화 손
 
C++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete typesC++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete types진화 손
 
C++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirementsC++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirements진화 손
 
C++20 Concepts library
C++20 Concepts libraryC++20 Concepts library
C++20 Concepts library진화 손
 
C++20 Coroutine
C++20 CoroutineC++20 Coroutine
C++20 Coroutine진화 손
 
C++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rulesC++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rules진화 손
 
C++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rulesC++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rules진화 손
 
C++20 explicit(bool)
C++20 explicit(bool)C++20 explicit(bool)
C++20 explicit(bool)진화 손
 
C++20 std::map::contains
C++20 std::map::containsC++20 std::map::contains
C++20 std::map::contains진화 손
 
C++20 Comparing unordered containers
C++20 Comparing unordered containersC++20 Comparing unordered containers
C++20 Comparing unordered containers진화 손
 
C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]진화 손
 
C++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contextsC++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contexts진화 손
 
C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>진화 손
 
C++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptrC++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptr진화 손
 
C++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fieldsC++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fields진화 손
 

More from 진화 손 (20)

C++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdfC++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdf
 
C++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdfC++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdf
 
C++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templatesC++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templates
 
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
 
C++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functionsC++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functions
 
C++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdfC++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdf
 
C++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete typesC++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete types
 
C++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirementsC++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirements
 
C++20 Concepts library
C++20 Concepts libraryC++20 Concepts library
C++20 Concepts library
 
C++20 Coroutine
C++20 CoroutineC++20 Coroutine
C++20 Coroutine
 
C++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rulesC++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rules
 
C++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rulesC++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rules
 
C++20 explicit(bool)
C++20 explicit(bool)C++20 explicit(bool)
C++20 explicit(bool)
 
C++20 std::map::contains
C++20 std::map::containsC++20 std::map::contains
C++20 std::map::contains
 
C++20 Comparing unordered containers
C++20 Comparing unordered containersC++20 Comparing unordered containers
C++20 Comparing unordered containers
 
C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]
 
C++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contextsC++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contexts
 
C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>
 
C++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptrC++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptr
 
C++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fieldsC++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fields
 

구글테스트