1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 2006-2020. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% You may obtain a copy of the License at
9%%
10%%     http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20-module(core_SUITE).
21
22-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
23	 init_per_group/2,end_per_group/2,
24	 init_per_testcase/2,end_per_testcase/2,
25	 dehydrated_itracer/1,nested_tries/1,
26	 seq_in_guard/1,make_effect_seq/1,eval_is_boolean/1,
27	 unsafe_case/1,nomatch_shadow/1,reversed_annos/1,
28	 map_core_test/1,eval_case/1,bad_boolean_guard/1,
29	 bs_shadowed_size_var/1,
30	 cover_v3_kernel_1/1,cover_v3_kernel_2/1,cover_v3_kernel_3/1,
31	 cover_v3_kernel_4/1,cover_v3_kernel_5/1,
32         non_variable_apply/1,name_capture/1,fun_letrec_effect/1,
33         get_map_element/1]).
34
35-include_lib("common_test/include/ct.hrl").
36
37-define(comp(N),
38	N(Config) when is_list(Config) -> try_it(N, Config)).
39
40init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
41    Config.
42
43end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
44    ok.
45
46suite() ->
47    [{ct_hooks,[ts_install_cth]},
48     {timetrap,{minutes,5}}].
49
50all() ->
51    [{group,p}].
52
53groups() ->
54    [{p,test_lib:parallel(),
55      [dehydrated_itracer,nested_tries,seq_in_guard,make_effect_seq,
56       eval_is_boolean,unsafe_case,nomatch_shadow,reversed_annos,
57       map_core_test,eval_case,bad_boolean_guard,
58       bs_shadowed_size_var,
59       cover_v3_kernel_1,cover_v3_kernel_2,cover_v3_kernel_3,
60       cover_v3_kernel_4,cover_v3_kernel_5,
61       non_variable_apply,name_capture,fun_letrec_effect,
62       get_map_element
63      ]}].
64
65
66init_per_suite(Config) ->
67    test_lib:recompile(?MODULE),
68    Config.
69
70end_per_suite(_Config) ->
71    ok.
72
73init_per_group(_GroupName, Config) ->
74    Config.
75
76end_per_group(_GroupName, Config) ->
77    Config.
78
79
80?comp(dehydrated_itracer).
81?comp(nested_tries).
82?comp(seq_in_guard).
83?comp(make_effect_seq).
84?comp(eval_is_boolean).
85?comp(unsafe_case).
86?comp(nomatch_shadow).
87?comp(reversed_annos).
88?comp(map_core_test).
89?comp(eval_case).
90?comp(bad_boolean_guard).
91?comp(bs_shadowed_size_var).
92?comp(cover_v3_kernel_1).
93?comp(cover_v3_kernel_2).
94?comp(cover_v3_kernel_3).
95?comp(cover_v3_kernel_4).
96?comp(cover_v3_kernel_5).
97?comp(non_variable_apply).
98?comp(name_capture).
99?comp(fun_letrec_effect).
100?comp(get_map_element).
101
102try_it(Mod, Conf) ->
103    Src = filename:join(proplists:get_value(data_dir, Conf),
104			atom_to_list(Mod)),
105    compile_and_load(Src, []),
106    compile_and_load(Src, [no_copt]).
107
108compile_and_load(Src, Opts) ->
109    {ok,Mod,Bin} = compile:file(Src, [from_core,report,time,binary|Opts]),
110    {module,Mod} = code:load_binary(Mod, Mod, Bin),
111    ok = Mod:Mod(),
112    _ = code:delete(Mod),
113    _ = code:purge(Mod),
114    ok.
115