Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imjiangjun
pbrt-v4
提交
da2fd690
P
pbrt-v4
项目概览
imjiangjun
/
pbrt-v4
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pbrt-v4
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
da2fd690
编写于
8月 26, 2021
作者:
M
Matt Pharr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add rudimentary monotonic_buffer_resource correctness test
上级
50c36dc3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
0 deletion
+50
-0
src/pbrt/util/pstd_test.cpp
src/pbrt/util/pstd_test.cpp
+50
-0
未找到文件。
src/pbrt/util/pstd_test.cpp
浏览文件 @
da2fd690
...
...
@@ -7,6 +7,7 @@
#include <pbrt/util/pstd.h>
#include <pbrt/util/rng.h>
#include <map>
#include <set>
#include <string>
...
...
@@ -103,3 +104,52 @@ TEST(Optional, RunDestructors) {
}
EXPECT_EQ
(
0
,
AliveCounter
::
nAlive
);
}
class
TrackingResource
:
public
pstd
::
pmr
::
memory_resource
{
public:
void
*
do_allocate
(
size_t
bytes
,
size_t
alignment
)
{
void
*
ptr
=
new
char
[
bytes
];
allocs
[
ptr
]
=
bytes
;
return
ptr
;
}
void
do_deallocate
(
void
*
ptr
,
size_t
bytes
,
size_t
alignment
)
{
auto
iter
=
allocs
.
find
(
ptr
);
ASSERT_TRUE
(
iter
!=
allocs
.
end
());
ASSERT_EQ
(
iter
->
second
,
bytes
);
allocs
.
erase
(
iter
);
delete
[]
(
char
*
)
ptr
;
}
bool
do_is_equal
(
const
memory_resource
&
other
)
const
noexcept
{
return
&
other
==
this
;
}
std
::
map
<
void
*
,
size_t
>
allocs
;
};
TEST
(
MonotonicBufferResource
,
NoOverlap
)
{
TrackingResource
tr
;
pstd
::
pmr
::
monotonic_buffer_resource
mb
(
1024
,
&
tr
);
Allocator
alloc
(
&
mb
);
RNG
rng
;
struct
Span
{
char
*
ptr
;
size_t
size
;
};
std
::
vector
<
Span
>
spans
;
for
(
int
i
=
0
;
i
<
10000
;
++
i
)
{
size_t
size
;
if
(
rng
.
Uniform
<
Float
>
()
<
.5
f
)
size
=
1
<<
rng
.
Uniform
<
int
>
(
12
);
else
size
=
rng
.
Uniform
<
int
>
(
2048
);
char
*
p
=
(
char
*
)
alloc
.
allocate_bytes
(
size
);
// O(n^2)...
for
(
const
Span
&
s
:
spans
)
EXPECT_TRUE
(
p
>=
s
.
ptr
+
s
.
size
||
p
+
size
<=
s
.
ptr
);
spans
.
push_back
(
Span
{
p
,
size
});
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录