Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDILab开源决策智能平台
treevalue
提交
683b07eb
T
treevalue
项目概览
OpenDILab开源决策智能平台
/
treevalue
大约 1 年 前同步成功
通知
3
Star
213
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
treevalue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
683b07eb
编写于
12月 28, 2021
作者:
HansBug
😆
1
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dev(hansbug): update get_or_default && add test for __hash__ of TreeStorage
上级
00896958
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
49 addition
and
3 deletion
+49
-3
test/tree/common/test_storage.py
test/tree/common/test_storage.py
+39
-1
treevalue/tree/common/storage.pyx
treevalue/tree/common/storage.pyx
+10
-2
未找到文件。
test/tree/common/test_storage.py
浏览文件 @
683b07eb
...
...
@@ -5,7 +5,7 @@ import pytest
from
treevalue.tree.common
import
create_storage
,
raw
,
TreeStorage
,
delayed_partial
# noinspection PyArgumentList,DuplicatedCode
# noinspection PyArgumentList,DuplicatedCode
,PyTypeChecker
@
pytest
.
mark
.
unittest
class
TestTreeStorage
:
def
test_init
(
self
):
...
...
@@ -80,6 +80,23 @@ class TestTreeStorage:
assert
t
.
get_or_default
(
'fff'
,
233
)
==
233
t1
=
create_storage
({
'a'
:
delayed_partial
(
lambda
:
t
.
get
(
'a'
)),
'b'
:
delayed_partial
(
lambda
:
t
.
get
(
'b'
)),
'c'
:
delayed_partial
(
lambda
:
t
.
get
(
'c'
)),
'd'
:
delayed_partial
(
lambda
:
t
.
get
(
'd'
)),
})
assert
t1
.
get_or_default
(
'a'
,
233
)
==
1
assert
t1
.
get_or_default
(
'b'
,
233
)
==
2
assert
t1
.
get_or_default
(
'c'
,
233
)
==
{
'x'
:
3
,
'y'
:
4
}
assert
isinstance
(
t1
.
get_or_default
(
'd'
,
233
),
TreeStorage
)
assert
t1
.
get_or_default
(
'd'
,
233
).
get_or_default
(
'x'
,
233
)
==
3
assert
t1
.
get_or_default
(
'd'
,
233
).
get_or_default
(
'y'
,
233
)
==
4
assert
t1
.
get_or_default
(
'fff'
,
233
)
==
233
assert
t1
.
get_or_default
(
'fff'
,
delayed_partial
(
lambda
:
2345
))
==
2345
assert
not
t1
.
contains
(
'fff'
)
def
test_set
(
self
):
t
=
create_storage
({})
t
.
set
(
'a'
,
1
)
...
...
@@ -415,3 +432,24 @@ class TestTreeStorage:
assert
v
==
h1
else
:
pytest
.
fail
(
'Should not reach here.'
)
def
test_hash
(
self
):
h
=
{}
h1
=
{
'x'
:
3
,
'y'
:
4
}
t
=
create_storage
({
'a'
:
1
,
'b'
:
2
,
'd'
:
h1
})
t1
=
create_storage
({
'a'
:
delayed_partial
(
lambda
:
t
.
get
(
'a'
)),
'b'
:
delayed_partial
(
lambda
:
t
.
get
(
'b'
)),
'd'
:
delayed_partial
(
lambda
:
t
.
get
(
'd'
)),
})
t2
=
create_storage
({
'a'
:
delayed_partial
(
lambda
:
t
.
get
(
'a'
)),
'b'
:
delayed_partial
(
lambda
:
3
),
'd'
:
delayed_partial
(
lambda
:
t
.
get
(
'd'
)),
})
h
[
t
]
=
1
assert
t1
in
h
assert
h
[
t1
]
==
1
assert
t2
not
in
h
treevalue/tree/common/storage.pyx
浏览文件 @
683b07eb
...
...
@@ -49,7 +49,15 @@ cdef class TreeStorage:
raise
KeyError
(
f
"Key
{
repr
(
key
)
}
not found in this tree."
)
cpdef
public
object
get_or_default
(
self
,
str
key
,
object
default
):
return
self
.
map
.
get
(
key
,
default
)
cdef
object
v
,
nv
v
=
self
.
map
.
get
(
key
,
default
)
nv
=
unwrap_proxy
(
v
)
if
nv
is
not
v
:
v
=
nv
if
key
in
self
.
map
:
self
.
map
[
key
]
=
v
return
v
cpdef
public
void
del_
(
self
,
str
key
)
except
*
:
try
:
...
...
@@ -189,7 +197,7 @@ cdef class TreeStorage:
cdef
str
k
cdef
object
v
cdef
list
_items
=
[]
for
k
,
v
in
sorted
(
self
.
map
.
items
(),
key
=
lambda
x
:
x
[
0
]):
for
k
,
v
in
sorted
(
self
.
items
(),
key
=
lambda
x
:
x
[
0
]):
_items
.
append
((
k
,
v
))
return
hash
(
tuple
(
_items
))
...
...
HansBug
😆
@HansBug
mentioned in commit
dfad84bc
·
12月 29, 2021
mentioned in commit
dfad84bc
mentioned in commit dfad84bce4afc2aab16fc58b7daaba7de28c18bc
开关提交列表
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录