aboutsummaryrefslogblamecommitdiffstats
path: root/lib/stdlib/test/c_SUITE.erl
blob: bd84cdd22833e4389a9df7bbbe35efb65e4779d4 (plain) (tree)
1
2
3
4
5


                   
                                                        
   










                                                                           



                 

                                                                    
                                                                    


                                                      
 
                                           
 
                        
 
                                         
 
         



                                                



            





                         
                                     
           

                                    
           
 


                                                             
                                                              
                                   

                                                                      

                               
 
                                                              
                                   

                                                                  

                               




                                                                   

                                                             
                                   

                                                                      


                               
 

                                                             
                                   

                                                                  


                               
 

                                                             
                                                     
                                    

                                                                      

                                
 
                                                     
                                    

                                                                  

                                




                                                                   

                                                    
                                    

                                                                      


                                
 

                                                    
                                    

                                                                  


                                
 











































                                                                      
                                  
                                                      




                                             
                                                        
                                      
       












                                        

                       

                                                                    

        
                                     
             




                                                                                         
 
                                     
                               
      
%%
%% %CopyrightBegin%
%% 
%% Copyright Ericsson AB 1998-2018. All Rights Reserved.
%% 
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%%     http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%% 
%% %CopyrightEnd%
%%
-module(c_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
	 init_per_group/2,end_per_group/2]).
-export([c_1/1, c_2/1, c_3/1, c_4/1, nc_1/1, nc_2/1, nc_3/1, nc_4/1,
	 c_default_outdir_1/1, c_default_outdir_2/1,
         nc_default_outdir_1/1, nc_default_outdir_2/1,
         ls/1, memory/1]).

-include_lib("common_test/include/ct.hrl").

-import(c, [c/2, nc/2]).

suite() -> [{ct_hooks,[ts_install_cth]}].

all() -> 
    [c_1, c_2, c_3, c_4, nc_1, nc_2, nc_3, nc_4,
     c_default_outdir_1, c_default_outdir_2,
     nc_default_outdir_1, nc_default_outdir_2,
     ls, memory].

groups() -> 
    [].

init_per_suite(Config) ->
    Config.

end_per_suite(_Config) ->
    ok.

init_per_group(_GroupName, Config) ->
    Config.

end_per_group(_GroupName, Config) ->
    Config.


%%% Write output to a directory other than current directory:

%% OTP-1209: Check that c:c/2 works also with option 'outdir'.
c_1(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
    W = proplists:get_value(priv_dir, Config),
    Result = c(R,[{outdir,W}]),
    {ok, m} = Result.

%% OTP-1209: Check that c:c/2 works also with option 'outdir'.
c_2(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m"),
    W = proplists:get_value(priv_dir, Config),
    Result = c(R,[{outdir,W}]),
    {ok, m} = Result.


%%% Put results in current directory (or rather, change current dir
%%% to the output dir):

%% OTP-1209: Check that c:c/2 works also with option 'outdir'
%% (same as current directory).
c_3(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Result = c(R,[{outdir,W}]),
    {ok, m} = Result.

%% OTP-1209: Check that c:c/2 works also with option 'outdir'
%% (same as current directory).
c_4(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Result = c(R,[{outdir,W}]),
    {ok, m} = Result.

%%% Write output to a directory other than current directory:

%% Check that c:nc/2 works also with option 'outdir'.
nc_1(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
    W = proplists:get_value(priv_dir, Config),
    Result = nc(R,[{outdir,W}]),
    {ok, m} = Result.

%% Check that c:nc/2 works also with option 'outdir'.
nc_2(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m"),
    W = proplists:get_value(priv_dir, Config),
    Result = nc(R,[{outdir,W}]),
    {ok, m} = Result.


%%% Put results in current directory (or rather, change current dir
%%% to the output dir):

%% Check that c:nc/2 works also with option 'outdir'
%% (same as current directory).
nc_3(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Result = nc(R,[{outdir,W}]),
    {ok, m} = Result.

%% Check that c:nc/2 works also with option 'outdir'
%% (same as current directory).
nc_4(Config) when is_list(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Result = nc(R,[{outdir,W}]),
    {ok, m} = Result.

c_default_outdir_1(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Obj = "m" ++ code:objfile_extension(),
    _ = file:delete(Obj),
    false = filelib:is_file(Obj),
    Result = c:c(R),
    {ok, m} = Result,
    true = filelib:is_file(Obj).

c_default_outdir_2(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Obj = "m" ++ code:objfile_extension(),
    _ = file:delete(Obj),
    false = filelib:is_file(Obj),
    Result = c:c(R),
    {ok, m} = Result,
    true = filelib:is_file(Obj).

nc_default_outdir_1(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Obj = "m" ++ code:objfile_extension(),
    _ = file:delete(Obj),
    false = filelib:is_file(Obj),
    Result = c:nc(R),
    {ok, m} = Result,
    true = filelib:is_file(Obj).

nc_default_outdir_2(Config) ->
    R = filename:join(proplists:get_value(data_dir, Config), "m"),
    W = proplists:get_value(priv_dir, Config),
    file:set_cwd(W),
    Obj = "m" ++ code:objfile_extension(),
    _ = file:delete(Obj),
    false = filelib:is_file(Obj),
    Result = c:nc(R),
    {ok, m} = Result,
    true = filelib:is_file(Obj).

ls(Config) when is_list(Config) ->
    Directory = proplists:get_value(data_dir, Config),
    ok = c:ls(Directory),
    File = filename:join(Directory, "m.erl"),
    ok = c:ls(File),
    ok = c:ls("no_such_file").

%% Check that c:memory/[0,1] returns consistent results.
memory(Config) when is_list(Config) ->
    try
	ML = c:memory(),
	T =  mget(total, ML),
	P =  mget(processes, ML),
	S =  mget(system, ML),
	A =  mget(atom, ML),
	AU = mget(atom_used, ML),
	B =  mget(binary, ML),
	C =  mget(code, ML),
	E =  mget(ets, ML),
	T = P + S,
	if S >= A + B + C + E -> ok end,
	if A >= AU -> ok end,
	ok
    catch
	error:notsup ->
	    {skipped,
	     "erlang:memory/[0,1] and c:memory/[0,1] not supported"}
    end.

%% Help function for c_SUITE:memory/1
mget(K, L) ->
    {value,{K,V}} = lists:keysearch(K, 1, L),
    test_v(c:memory(K)), % Check that c:memory/1 also accept this
						% argument and returns an integer (usally
						% *not* the same as V).
    test_v(V).

%% Help function for c_SUITE:memory/1
test_v(V) when is_integer(V) ->
    V.