我正在使用Boost 1.34.1单元测试框架。(我知道该版本很旧,但是由于技术原因,目前不可以选择更新或切换框架。)
我有一个#define BOOST_TEST_MODULE UnitTests包含三个测试套件(BOOST_AUTO_TEST_SUITE( Suite1 );)的测试模块(),而测试套件又由几个BOOST_AUTO_TEST_CASE()s 组成。
我的问题:
是否可以仅运行测试模块的一个子集,即将测试运行限制为仅一个测试套件,甚至仅一个测试用例?
推理:
我将单元测试集成到我们的automake框架中,从而使整个模块都在上运行make check。我不想将其拆分为多个模块,因为我们的应用程序会生成大量输出,并且很高兴看到底部的测试摘要(“ X个Y测试失败”)而不是分散在几千行输出中。
但是完整的测试运行也很耗时,并且您正在寻找的测试输出同样被淹没;因此,如果我能以某种方式限制正在运行的测试的范围,那将是很好的。
Boost文档使我非常困惑,没有一个人明智。周围有人可能有建议吗?(一些欺骗手段允许拆分测试模块,同时仍然收到可用的测试摘要,这也将受到欢迎。)
我有这个:
// Get database access parameters
const char* db = "codes", *server = "localhost", *user = "root", *pass = "pass";
// Connect to the sample database.
mysqlpp::Connection conn(false);
if (conn.connect(db, server, user, pass)) {
for (int i=0; i<10; ++i)
{
int d, count;
cout << "??????? D\n";
cin >> d;
cout << "??????? ?????????? ??????? ??? D=" << d << endl;
cin >> count;
for (int a=0; a<count; ++a)
{
char * name;
int r,n1,n2;
cout << "??????? R\n";
cin …Run Code Online (Sandbox Code Playgroud) 在跨平台应用程序中,我正在使用一个配置文件,允许用户根据需要覆盖各种默认值.
我遇到的问题是......在哪里放置/寻找这个配置文件,特别是关于MacOS X(我从未使用过,无法访问)?我知道MacOS X是基于Unix的,但是我也知道很多东西都是以非常不同的方式完成的......
我目前的选择:
Unix的:
~/.config/<appname>/<appname>.cfg
Run Code Online (Sandbox Code Playgroud)
Windows(这个也不确定,这里的东西似乎到处都是 - %LOCALAPPDATA%或%USERPROFILE%似乎也是有效的选择):
%APPDATA%/<appname>/<appname>.cfg
Run Code Online (Sandbox Code Playgroud)
苹果系统:
...?
Run Code Online (Sandbox Code Playgroud)
有关MacOS或其他选择的任何评论吗?
我想static_assert()广泛的字符文字(L'x')的签名与wchar_t.
定义wchar_t是我自己的.(我正在实现一个C标准库.)如果用户使用的编译器对宽字符签名的概念与库中配置的不同,我想尽早失败,大声失败.
断言匹配大小的类型很容易:
static_assert( sizeof( wchar_t ) == sizeof( L'x' ), "size matches" );
Run Code Online (Sandbox Code Playgroud)
对于内置类型char,测试签名很容易.假设在_CHAR_IS_SIGNED某处定义为0或1,
static_assert( ( (char)-1 < 0 ) == _CHAR_IS_SIGNED, "char is signed" );
Run Code Online (Sandbox Code Playgroud)
诀窍.
但是,wchar_t是不是一个内置式...
有没有办法在"纯"C99或C11中进行此(静态)断言,即不依赖于特定编译器的扩展?
澄清:
我"是"图书馆.我必须要typedef一些整数类型wchar_t.
编译器 - 不是我 - 将宽字符文字定义为某种类型.编译器未为此类型指定名称,但理想情况下应与我使用的任何名称相同wchar_t,包括签名(其中,AFAICT,未由标准指定).
我想以某种方式断言/测试这些类型的身份.上面(type)-1 < 0显示的检查char不起作用,因为我不能命名"编译器用于文字的类型".
我目前是计算机科学专业的学生,今天我收到了一份非常普通的作业,应该用C++编写.直到今天我才学习C语言.这更像是盲目的任务.
在C中,我通常使用这个:
printf("\n\n\t%-30s %-7d liters\n\t%-30s %-7d liters\n\t%-30s %-7d km",
"Current gasoline in reserve:",
db.currentGas,
"Total gasoline used:",
db.usedGas,
"Total travel distance:",
db.usedGas);
Run Code Online (Sandbox Code Playgroud)
由于赋值的条件是它应该用C++编写,这就是我尝试过的:
cout << setw(30) << "\n\n\tCurrent gasoline in reserve: "
<< setw(7) << db.currentGas << "litres"
<< setw(30) << "\n\tTotal gasoline used: "
<< setw(7) << db.usedGas << "litres"
<< setw(30) << "\n\tTotal travel distance: "
<< setw(7) << db.travelDistance << "km";
Run Code Online (Sandbox Code Playgroud)
但看起来C %-30s和C++ 之间存在差异setw(30)?
C标准指出...
...从初始调用返回到
main函数等同于exit以主函数返回的值作为参数来调用函数。
从我的角度来看,这通常是通过C运行时支持代码(crt0.c)来实现的,方法就是精确地做到这一点-调用exitfrom中的返回值main。
result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
exit (result);
Run Code Online (Sandbox Code Playgroud)
exit(main(argc, argv, envp));
Run Code Online (Sandbox Code Playgroud)
但是,当我编写自己的版本时exit,不会被调用:
#include <stdio.h>
#include <stdlib.h>
void exit( int rc )
{
puts( "ok" );
fflush( stdout );
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这不会产生我期望的“确定”输出。显然我在这里缺少什么?
上下文:我正在实现一个C标准库,仅是ISO部分,即没有crt0.c。我希望现有的系统运行时可以调用我自己的exit实现,因此“我的”清理(如刷新和关闭流,处理向其注册的函数atexit等)将在从main链接到我的库的返回时自动运行。显然不是这样,我只是不明白为什么不这样做。
我编写了一个简单的 Makefile 来编译几种类型的源代码。而且效果很好。这个Makefile会找到所有的protobuf源码和C++源码。因此,制作程序将如下所示。
protoc将生成C++源文件*.protog++*.cpp将使用and编译目标文件*.pb.cc(由步骤 1 生成)g++(实际上是ld)将所有对象链接*.obj到单个可执行文件这个 Makefile 示例是:
# Define the protoc generator
PROTOC = protoc
INCLUDE = -I$(SOMEPLACE)
LIB = -lxml2 -lpthread -lz
# The final single outputted executable
OUTPUT = svrkit_adapter_v2
# Define the cpp source code/object result
SOURCES = $(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
# Define the proto's source/generated result/object result
PROTO_SOURCES = $(wildcard *.proto)
PROTO_CPPSRC = …Run Code Online (Sandbox Code Playgroud) 这是一个具有两个不同返回类型的 getter 的类:
class A {
std::string m_test { "test" };
public:
std::string test_by_value { return m_test; }
const std::string& test_by_const_ref() { return m_test; }
};
// ...
Run Code Online (Sandbox Code Playgroud)
哪个更好?它是关于 std::string 的,而不是内置类型。STL在https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中是否说最好按值返回,因为多个副本将被优化?还是我对他的理解有误?
我有以下c ++代码。我可以在Linux机器上使用g ++ 4.9.2进行编译。然后,当我运行它时,它会显示10。似乎在默认构造函数中创建了一个新对象并将其分配给使用const_cast创建的指针。没有内存泄漏(我使用valgrind检查了)。这是某种未定义的行为还是合法的?
#include <iostream>
using namespace std;
class A
{
public:
A() : x(0)
{
A *tmp = const_cast<A*>(this);
*tmp = A(10);
}
A(int x)
{
this->x = x;
}
int getX() const
{
return x;
}
private:
int x;
};
int main()
{
A a;
cout << a.getX() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 给定包名称$package和该包内的函数名称$function,我可以创建对该函数的引用:
my $ref = eval( "\\&${package}::${function}" );
Run Code Online (Sandbox Code Playgroud)
作为一个完整的例子:
#!/usr/bin/perl -w
use strict;
package foo;
sub func()
{
print "foo::func\n";
}
package main;
my $package = "foo";
my $function = "func";
my $ref = eval( "\\&${package}::$function" );
$ref->();
Run Code Online (Sandbox Code Playgroud)
我不太喜欢eval()那里的内容,想知道如果没有 ,是否可以达到相同的结果eval()?
c++ ×4
c ×3
app-config ×1
boost ×1
c++11 ×1
const-cast ×1
crt ×1
formatting ×1
io ×1
iomanip ×1
macos ×1
makefile ×1
perl ×1
reference ×1
return-type ×1
runtime ×1
this ×1
unit-testing ×1