From 870172d69230ad2cf0f409ec009ab3feaa723fee Mon Sep 17 00:00:00 2001 From: Siraaj Khandkar Date: Sat, 24 Jan 2015 21:14:50 -0500 Subject: [PATCH] Add get with default to dictionary interface. --- src/hope.app.src | 2 +- src/hope_gen_dictionary.erl | 3 +++ src/hope_kv_list.erl | 7 +++++++ test/hope_dictionary_SUITE.erl | 16 ++++++++++++++-- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/hope.app.src b/src/hope.app.src index 051e619..3de6e3d 100644 --- a/src/hope.app.src +++ b/src/hope.app.src @@ -1,7 +1,7 @@ {application, hope, [ {description, "Higher Order Programming in Erlang"}, - {vsn, "2.0.1"}, + {vsn, "2.1.0"}, {registered, []}, {applications, [ kernel, diff --git a/src/hope_gen_dictionary.erl b/src/hope_gen_dictionary.erl index 0d45ecd..dda6eb0 100644 --- a/src/hope_gen_dictionary.erl +++ b/src/hope_gen_dictionary.erl @@ -15,6 +15,9 @@ -callback get(t(K, V), K) -> hope_option:t(V). +-callback get(t(K, V), K, V) -> + V. + -callback set(t(K, V), K, V) -> t(K, V). diff --git a/src/hope_kv_list.erl b/src/hope_kv_list.erl index be11c31..d9a8177 100644 --- a/src/hope_kv_list.erl +++ b/src/hope_kv_list.erl @@ -12,6 +12,7 @@ -export( [ empty/0 , get/2 + , get/3 , set/3 , update/3 , pop/2 @@ -53,6 +54,12 @@ get(T, K) -> ; {K, V} -> {some, V} end. +-spec get(t(K, V), K, V) -> + V. +get(T, K, Default) -> + Vopt = get(T, K), + hope_option:get(Vopt, Default). + -spec set(t(K, V), K, V) -> t(K, V). set(T, K, V) -> diff --git a/test/hope_dictionary_SUITE.erl b/test/hope_dictionary_SUITE.erl index 914ae48..4f355ca 100644 --- a/test/hope_dictionary_SUITE.erl +++ b/test/hope_dictionary_SUITE.erl @@ -1,7 +1,5 @@ -module(hope_dictionary_SUITE). --include_lib("proper/include/proper.hrl"). - %% Callbacks -export( [ all/0 @@ -14,6 +12,7 @@ -export( [ t_set_new/1 , t_set_existing/1 + , t_get/1 , t_pop/1 , t_fold/1 , t_dictionary_specs/1 @@ -35,6 +34,7 @@ groups() -> Tests = [ t_set_new , t_set_existing + , t_get , t_pop , t_fold , t_dictionary_specs @@ -53,6 +53,18 @@ end_per_group(_DictModule, _Cfg) -> %% Test cases %% ============================================================================= +t_get(Cfg) -> + {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), + K1 = k1, + K2 = k2, + V1 = v1, + V2 = v2, + D = DictModule:set(DictModule:empty(), K1, V1), + {some, V1} = DictModule:get(D, K1), + V1 = DictModule:get(D, K1, V2), + none = DictModule:get(D, K2), + V2 = DictModule:get(D, K2, V2). + t_set_new(Cfg) -> {some, DictModule} = hope_kv_list:get(Cfg, ?DICT_MODULE), Key = key, -- 2.20.1