Cpp 单元测试:GoogleTest + CTest 配置与使用
现在我们关注CMake项目中的测试部分,具体包括GoogleTest和CTest的使用。 概述Google Test(简称为 gtest)是 Google 开发的一个开源的 C++ 测试框架,用于编写和运行单元测试、集成测试和功能测试。主要特点包括: 支持各种平台和编译器,包括 Linux、Windows 和 macOS,并且与主流的 C++ 编译器兼容。 提供了丰富的断言宏,如 EXPECT_EQ、ASSERT_TRUE 等,用于验证代码行为是否符合预期。 支持参数化测试,允许以不同的参数运行同一个测试用例。 可以生成详细的测试报告,包括测试通过的数量、失败的数量、失败的原因等信息。 可以扩展测试框架,编写自定义的测试扩展和断言宏。 除了 Google Test,Catch2 也是一个相对主流的 C++ 测试框架,Catch2 还是一个 header-only 的单文件库。 通常无法对可执行文件进行单元测试,如果需要测试的目标可执行文件,一个建议的做法是把核心逻辑全部写成一个静态库文件,可执行文件仅仅作为库文件的简单包装,然后对库进行测试。(例如 CPython 作为...
CUDA学习笔记——入门例子
虽然配置CUDA的目的主要是支持PyTorch的机器学习,但是如果需要直接手写CUDA代码,并在Windows上使用nvcc顺利编译和执行纯CUDA程序,还需要Visual Studio相关工具的支持。(MINGW似乎不太行,或者说鼓捣起来太麻烦,Windows中的nvcc默认是配合MSVC进行编译的)鉴于我在电脑上安装了VS2022,并且CUDA自动给VS2022加了插件适配,因此尝试学一点CUDA,并写几个简单的HelloWorld程序。 基本概念CUDA编程模型是一个异构模型,需要CPU和GPU协同工作,通常CPU负责处理逻辑复杂的串行程序,而GPU重点处理数据密集型的并行计算程序,从而发挥最大功效。在CUDA中,用host指代CPU及其内存,用device指代GPU及显存。CUDA程序中既包含host程序,又包含device程序,它们分别在CPU和GPU上运行。host与device之间可以进行通信,在它们之间通信需要进行数据拷贝。一个典型的CUDA程序的计算流程如下: 分配host内存,并进行数据初始化; 分配device显存,并从host将数据拷贝到device上;...
CUDA学习笔记——基本概念与CUDA下载
显卡显卡(Graphics card),全称显示接口卡,又称显示适配器,是计算机的重要硬件组件之一,负责图形处理和显示输出。显卡通常由 GPU(图形处理器)、显存、供电模块等部分组成。类似的扩展设备还有网卡、声卡等。显卡的主要功能是将计算机内部处理的数字信号转换为显示器可识别的图像信号,从而驱动屏幕显示内容。 早期显卡多集成在主板上,仅承担基础的视频输出功能,并不负责复杂的图形计算。随着技术发展,出现了独立显卡和集成显卡的区分: 集成显卡:集成在 CPU 或主板芯片组中,依赖系统内存(RAM)作为显存,无法单独更换。适用于轻量办公和日常使用。 独立显卡:作为独立硬件插入主板的 PCIe 插槽,拥有专用显存和更强的计算能力,可随时更换升级。独立显卡在图形渲染、视频处理、科学计算等任务中表现更优。 现代笔记本通常配备双显卡:一个集成显卡(低功耗)和一个独立显卡(高性能)。系统可根据任务需求自动切换,以平衡性能和能耗。轻薄本可能仅配集成显卡以延长续航,而游戏本、工作站则倾向于搭载性能优先的独立显卡。 显卡驱动显卡作为硬件设备,需要在操作系统中安装正确的显卡驱动程序以正常运行。**显...
LaTeX Beamer 笔记
关于 Beamer 的整理笔记,假定读者有一定的 LaTeX 基础。 注意到 Beamer 虽然属于 LaTeX 的一部分,但是与标准的 LaTeX 文档有很多的不同,部分 LaTeX 宏包和命令可能无法在 Beamer 上呈现正常的效果,这也意味着 Beamer 的编译错误更难改正。 笔记主要参考 latex-beamer.com 的英文在线教程和若干博客。 笔者目前使用的模板的两种风格效果如下,对应的 Github 仓库:latexzero。 极简示例从一个最简单的例子开始 1234567891011121314151617181920212223\documentclass{beamer}% Theme choice:\usetheme{AnnArbor}% Title page details:\title{My First \LaTeX{} Presentation}\subtitle{A subtitle}\author{Author}\da...
VSCode LaTeX WorkShop 配置
基础概念LaTeX WorkShop 插件的编译逻辑分为两层:第一层为 recipe,第二层为 tool,具有如下特点: 一个 recipe 由若干个 tool 组成; 在配置文件中可以提供多个 recipe 和多个 tool; 直接点击编译按钮会自动选择第一个(或上一次使用的)recipe 来执行编译; 一个 tool 通常包括一个单独的编译命令加上若干参数,例如 xelatex,lualatex 和 pdflatex 等,还可能是处理参考文献需要的 bibtex 或 biber; 一个 recipe 会依次执行它所包含的 tool,例如: 1xelatex -> bibtex -> xelatex -> xelatex LaTeX WorkShop 插件其实只是对原本在命令行操作的 LaTeX 编译命令以及格式化命令进行了封装。此外,LaTeX WorkShop 插件会在命令中传递特殊变量%DOC%或%DOCFILE%代表当前文件,第一个是文件名(含完整路径,不含后缀),第二个则是文件名(不含后缀),略有区别。 由于插件也只是调用了pdflatex、...
LaTeX 参考文献笔记
整理一下 LaTeX 中关于参考文献的内容。 基本命令和引用LaTeX 提供的对参考文献的底层支持主要是thebibliography环境,大致相当于一个特殊的列表,在使用的地方会展示参考文献列表(包括标题 References 或 参考文献),使用示例如下 12345678910111213\documentclass{article}\begin{document}According to Einstein's theory of relativity \cite{einstein1905}...\begin{thebibliography}{99} \bibitem{einstein1905} Albert Einstein. \textit{On the Electrodynamics of Moving Bodies}. Annalen der Physik, 1905. \bibitem{knuth...
LaTeX 英文字体配置
英文字体配置在 LaTeX 的 article 等基本文档类中,默认的英文字体为 Computer Modern Roman。 一个常见的英文字体为 Times New Roman,在很长时间内它是 Windows 平台上 Word 的默认西文字体,与 LaTeX 的英文字体不同,并且该字体不能免费商用。 英文字体的配置命令包括如下三条: 123456% 英文默认字体\setmainfont{<font name>}[<font features>]% 英文无衬线字体\setsansfont{<font name>}[<font features>]% 英文等宽字体\setmonofont{<font name>}[<font features>] 例如 123\setmainfont{Noto Serif Light}\setsansfont{Noto Sans}\setmonofont[Scale=M...
LaTeX 中文字体配置
LaTeX 说到底还是一个排版系统,字体是排版关注的核心内容之一,但是由于历史原因,字体系统在设计和使用中混乱不堪,深究起来就是巨坑,这里简单整理一下 LaTeX 在中文排版时的字体配置相关知识。 由于版权等原因,Tex Live 虽然已经打包了很多内容,但是并不会包括一些常见的中文字体,需要用户自行配置处理。由于本文中的命令需要直接或间接依赖 fontspec 宏包,它是一个基于 XeLaTeX 和 LuaLaTeX 的字体配置宏包,因此不支持 pdfLaTeX,这个宏包可能会影响数学字体,在使用时可以传入 no-math 选项。本文只考虑 ctex 宏包,在 Windows/Linux 系统的中文字体排版,并且只使用 XeLaTeX。 本文主要参考 ctex 用户文档,以及 LaTeX 中文字体配置基础指南 中文字体常识与书法字体不同,中文印刷/显示字体主要有以下几种: 楷体:源自实际书写中的楷体得到的字体 宋体:从唐宋直到明清,印刷行业对字体从楷体进行的简化,典型的特点是横平竖直,并且有尖角等辅助结构。(与宋朝没什么特别关系,主要定型于明朝,在清朝...
LaTeX 排版基础笔记
整理一下 LaTeX 排版中的基本要素,从默认的 article 文档类着手。关于数学公式、数学字体和参考文献等更具体的内容,由于比较复杂,对其单独整理。 这里主要关注 LaTeX 排版的技术性内容,不讨论非技术性内容。 页面布局通常需要在使用文档时首先全局地规定一些排版参数,如字号、纸张大小、单双面等等。比如调用 article 文档类排版文章,指定基本字号为 11pt,双面排版,纸张为 A4 大小: 1\documentclass[10pt,twoside,a4paper]{article} 常用的参数如下: 指定字号,例如 10pt,11pt,12pt,默认 10pt 指定纸张大小,默认为美式信纸 letterpaper(大约 21.6 cm × 28.0 cm)。可指定选项还包括 a4paper,b5paper,executivepaper 和 legalpaper 等。有关纸张大小页边距的更多细节主要通过 geometry 包设置,当然在这里设置也可以 单面/双面排版,twoside,oneside。双面排版时,奇偶页的页眉页脚、页...
LaTeX 数学公式与字体
整理一下 LaTeX 关于数学公式、数学字体以及相关的细节内容。 主要内容参考 一份(不太)简短的 LaTeX2ε 介绍 和《LaTeX 入门(刘海洋)》。 AMS 宏包AMS 提供了一系列最常用的 LaTeX 数学宏包: amsmath 宏包: 提供了一套增强的数学排版命令和环境,使得数学公式的编辑和排版更加灵活和方便。 引入了一些新的数学环境,例如 align 和 gather,以便更好地控制多行公式的排版。 提供了诸如 \text, \DeclareMathOperator 等命令,用于在数学模式中插入文本或定义新的运算符。 amssymb 宏包:扩展了 amsmath,提供了额外的数学符号,如各种箭头、关系符号、集合符号等。 amsfonts 宏包:提供了一些额外的字体,例如 \mathbb 命令用于黑板粗体字母。 amsthm 宏包:提供了 theorem, lemma, proof 等定理或证明环境,方便用户在文档中定义和使用定理。 下面的数学公式绝大部分都需要这些宏包,默认已经被导入 1\usepackage{amsmath, amssymb, a...
