小编Nei*_*ams的帖子

如何在单元测试期间设置数据结构的内部状态?

我正在用C#编写一个数据结构(一个使用斐波那契堆的优先级队列),我正在尝试将它作为TDD的学习经验,我很陌生.

我知道每个测试应该只测试一个类的一个部分,以便一个单元中的故障不会让我混淆多个测试失败,但是我不确定当数据结构的状态对于一个测试.

例如,

private PriorityQueue<int> queue;

[SetUp]
public void Initialize()
{
    this.queue = new PriorityQueue<int>();       
}

[Test]
public void PeekShouldReturnMinimumItem()
{
    this.queue.Enqueue(2);
    this.queue.Enqueue(1);

    Assert.That(this.queue.Peek(), Is.EqualTo(1));
}
Run Code Online (Sandbox Code Playgroud)

如果其中一个EnqueuePeek破坏,该测试将会中断.

我想我可以以某种方式让测试手动设置底层数据结构的堆,但我不知道如何在不将实现暴露给世界的情况下做到这一点.

有一个更好的方法吗?依赖其他部分好吗?

我有一个SetUp到位,只是为了简单而离开了它.

c# tdd

12
推荐指数
1
解决办法
2398
查看次数

从TCP套接字拼接时,Linux的splice(2)是否有效?

我一直在编写一个有趣的程序,可以在Linux上用C语言通过TCP传输文件.程序从套接字读取文件并将其写入文件(反之亦然).我最初使用读/写和程序正常工作,但后来我学习了拼接,并想尝试一下.

我用splice编写的代码在从stdin(重定向文件)读取并写入TCP套接字时非常有效,但在从套接字读取并写入stdout时,会立即将splice设置errno设置为EINVAL.手册页指出当两个描述符都不是管道(不是这种情况)时,EINVAL被设置,为无法搜索的流传递偏移量(没有传递偏移量),或文件系统不支持拼接,这导致我我的问题:这是否意味着TCP可以拼接管道,而不是

我包括下面的代码(减去错误处理代码),希望我做错了.它主要基于维基百科的拼接示例.

static void splice_all(int from, int to, long long bytes)
{
    long long bytes_remaining;
    long result;

    bytes_remaining = bytes;
    while (bytes_remaining > 0) {
        result = splice(
            from, NULL,
            to, NULL,
            bytes_remaining,
            SPLICE_F_MOVE | SPLICE_F_MORE
        );

        if (result == -1)
            die("splice_all: splice");

        bytes_remaining -= result;
    }
}

static void transfer(int from, int to, long long bytes)
{
    int result;
    int pipes[2];

    result = pipe(pipes);

    if (result == -1)
        die("transfer: pipe"); …
Run Code Online (Sandbox Code Playgroud)

c linux pipe

10
推荐指数
1
解决办法
6143
查看次数

在C++中用typedefing类的目的是什么?

在我正在研究的一些C++代码中,我经常看到类似下面的代码:

typedef class SomeClass SomeClass;
Run Code Online (Sandbox Code Playgroud)

我对这实际上取得的成就感到困惑.看起来这不会改变任何事情.这样做typedef是什么意思?如果这样做有用,是否值得付出额外的努力?

c++ typedef

10
推荐指数
3
解决办法
896
查看次数

多对多与"小学"

我正在开发一个需要代表计算机及其用户的数据库.每台计算机可以有多个用户,每个用户可以与多台计算机相关联,因此这是一种典型的多对多关系.但是,还需要一个"主要"用户的概念.我必须能够加入主用户才能列出所有主要用户的计算机.我不确定数据库中最好的结构方式是什么:

1)正如我现在所做的那样:将表与布尔IsPrimary列链接起来.加入需要像ON一样(c.c​​omputer_id = l.computer_id AND l.is_primary = 1).它有效,但感觉不对,因为将数据限制为每台计算机只有一个主要用户并不容易.

2)计算机表上直接指向用户行的字段,用户表中的所有行表示非主要用户.这代表了每个计算机的一次主要约束,但却使计算机用户列表变得更难.

3)计算机表上的一个字段,链接到链接表中的一行.感觉很奇怪......

4)还有别的吗?

描述这种关系的"关系"方式是什么?

编辑:@Mark Brackett:第三个选项对我来说似乎不那么奇怪,因为你已经展示了它的外观.出于某种原因,我甚至没有想到使用复合外键,所以我想我必须在链接表上添加一个标识列才能使其正常工作.看起来很棒,谢谢!

@ j04t:很酷,我很高兴我们现在同意#3.

sql-server database-design

6
推荐指数
1
解决办法
304
查看次数

如何增加表示为字符串的IP地址?

我有一个char类型的IP地址像char ip ="192.123.34.134"我想增加最后一个值(134).有人应该怎么做?我想,我应该将它转换为整数,然后再回来,但不幸的是我不知道怎么做?:(我正在使用C++.

请帮我!

谢谢,kampi

c++ string ip-address

6
推荐指数
1
解决办法
1万
查看次数

如何在c中转换指向int的指针(获取其ascii值)

我有一个指针(*ascii),它指向一个char的指针,我希望它的值是一个int,以使它成为一个像if语句一样

if ( ascii == 32 || ((ascii > 96) && (ascii < 123)) {

}
Run Code Online (Sandbox Code Playgroud)

这不起作用,我将不胜感激

c

1
推荐指数
1
解决办法
2945
查看次数

标签 统计

c ×2

c++ ×2

c# ×1

database-design ×1

ip-address ×1

linux ×1

pipe ×1

sql-server ×1

string ×1

tdd ×1

typedef ×1