Commit | Line | Data |
---|---|---|
f399d3fc | 1 | -module(hope_dictionary_SUITE). |
56b05e81 SK |
2 | |
3 | %% Callbacks | |
4 | -export( | |
5 | [ all/0 | |
6 | , groups/0 | |
5e835f3e SK |
7 | , init_per_group/2 |
8 | , end_per_group/2 | |
56b05e81 SK |
9 | ]). |
10 | ||
11 | %% Test cases | |
12 | -export( | |
39273fbe SK |
13 | [ t_set_new/1 |
14 | , t_set_existing/1 | |
870172d6 | 15 | , t_get/1 |
70cf8e86 | 16 | , t_pop/1 |
e75cf601 | 17 | , t_fold/1 |
8bbf6f4d | 18 | , t_dictionary_specs/1 |
67535be2 | 19 | , t_has_key/1 |
56b05e81 SK |
20 | ]). |
21 | ||
22 | ||
5e835f3e SK |
23 | -define(DICT_MODULE , dict_module). |
24 | -define(DICT_MODULE_KV_LIST , hope_kv_list). | |
56b05e81 SK |
25 | |
26 | ||
27 | %% ============================================================================ | |
28 | %% Common Test callbacks | |
29 | %% ============================================================================ | |
30 | ||
31 | all() -> | |
5e835f3e | 32 | [{group, ?DICT_MODULE_KV_LIST}]. |
56b05e81 SK |
33 | |
34 | groups() -> | |
35 | Tests = | |
39273fbe SK |
36 | [ t_set_new |
37 | , t_set_existing | |
870172d6 | 38 | , t_get |
70cf8e86 | 39 | , t_pop |
e75cf601 | 40 | , t_fold |
61cace5b | 41 | , t_dictionary_specs |
67535be2 | 42 | , t_has_key |
56b05e81 | 43 | ], |
8bbf6f4d | 44 | Properties = [parallel], |
5e835f3e SK |
45 | [{?DICT_MODULE_KV_LIST, Properties, Tests}]. |
46 | ||
47 | init_per_group(DictModule, Cfg) -> | |
48 | hope_kv_list:set(Cfg, ?DICT_MODULE, DictModule). | |
49 | ||
50 | end_per_group(_DictModule, _Cfg) -> | |
51 | ok. | |
56b05e81 SK |
52 | |
53 | ||
54 | %% ============================================================================= | |
55 | %% Test cases | |
56 | %% ============================================================================= | |
39273fbe | 57 | |
870172d6 SK |
58 | t_get(Cfg) -> |
59 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
60 | K1 = k1, | |
61 | K2 = k2, | |
62 | V1 = v1, | |
63 | V2 = v2, | |
64 | D = DictModule:set(DictModule:empty(), K1, V1), | |
65 | {some, V1} = DictModule:get(D, K1), | |
66 | V1 = DictModule:get(D, K1, V2), | |
67 | none = DictModule:get(D, K2), | |
e0fbc1da SK |
68 | V2 = DictModule:get(D, K2, V2), |
69 | default = DictModule:get(D, K1, default, fun (X) -> X =:= foo end), | |
70 | V1 = DictModule:get(D, K1, default, fun (X) -> X =:= V1 end). | |
870172d6 | 71 | |
5e835f3e SK |
72 | t_set_new(Cfg) -> |
73 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
39273fbe SK |
74 | Key = key, |
75 | ValExpected = bar, | |
5e835f3e SK |
76 | ListInitial = DictModule:empty(), |
77 | ListResulting = DictModule:set(ListInitial, Key, ValExpected), | |
78 | {some, ValResulting} = DictModule:get(ListResulting, Key), | |
39273fbe SK |
79 | ValResulting = ValExpected. |
80 | ||
5e835f3e SK |
81 | t_set_existing(Cfg) -> |
82 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
39273fbe SK |
83 | Key = key, |
84 | ValInitial = foo, | |
85 | ValExpected = bar, | |
86 | ListInitial = [{donald, duck}, {Key, ValInitial}], | |
5e835f3e SK |
87 | ListResulting = DictModule:set(ListInitial, Key, ValExpected), |
88 | {some, ValResulting} = DictModule:get(ListResulting, Key), | |
39273fbe | 89 | ValResulting = ValExpected. |
70cf8e86 | 90 | |
5e835f3e SK |
91 | t_pop(Cfg) -> |
92 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
70cf8e86 | 93 | KVList = [{a, 1}, {b, 2}, {c, 3}], |
5e835f3e SK |
94 | Dict1 = DictModule:of_kv_list(KVList), |
95 | {{some, 1} , Dict2} = DictModule:pop(Dict1, a), | |
96 | {none , Dict3} = DictModule:pop(Dict2, a), | |
97 | {{some, 2} , Dict4} = DictModule:pop(Dict3, b), | |
98 | {none , Dict5} = DictModule:pop(Dict4, b), | |
99 | {{some, 3} , Dict6} = DictModule:pop(Dict5, c), | |
100 | {none , Dict7} = DictModule:pop(Dict6, c), | |
101 | [] = DictModule:to_kv_list(Dict7). | |
e75cf601 SK |
102 | |
103 | t_fold(Cfg) -> | |
104 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
105 | KVList = [{a, 1}, {a, 5}, {b, 3}, {c, 4}, {c, 4}], | |
106 | Dict = DictModule:of_kv_list(KVList), | |
107 | 17 = DictModule:fold(Dict, fun (_K, V, Acc) -> V + Acc end, 0). | |
8bbf6f4d PO |
108 | |
109 | t_dictionary_specs(Cfg) -> | |
110 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
111 | [] = proper:check_specs(DictModule). | |
67535be2 SK |
112 | |
113 | t_has_key(Cfg) -> | |
114 | {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), | |
115 | D = DictModule:of_kv_list([{a, 1}, {b, 2}, {c, 3}]), | |
116 | true = DictModule:has_key(D, a), | |
117 | true = DictModule:has_key(D, b), | |
118 | true = DictModule:has_key(D, c), | |
119 | false = DictModule:has_key(D, d), | |
120 | false = DictModule:has_key(D, e), | |
121 | false = DictModule:has_key(D, f). |