2424
2525-include_lib (" common_test/include/ct.hrl" ).
2626-include_lib (" kernel/include/file.hrl" ).
27+ -include_lib (" stdlib/include/assert.hrl" ).
2728
2829-export ([all /0 , suite /0 , init_per_testcase /2 , end_per_testcase /2 ]).
2930
4647 test_length /1 ,
4748 fixed_apply_badarg /1 ,
4849 external_fun_apply3 /1 ,
49- node_1 /1 ,doctests /1 ]).
50+ node_1 /1 ,doctests /1 , is_integer_3_test / 1 ]).
5051
5152suite () ->
5253 [{ct_hooks ,[ts_install_cth ]},
@@ -64,7 +65,7 @@ all() ->
6465 is_process_alive , is_process_alive_signal_from ,
6566 process_info_blast , os_env_case_sensitivity ,
6667 verify_middle_queue_save , test_length ,fixed_apply_badarg ,
67- external_fun_apply3 , node_1 , doctests ].
68+ external_fun_apply3 , node_1 , doctests , is_integer_3_test ].
6869
6970init_per_testcase (guard_bifs_in_erl_bif_types , Config ) when is_list (Config ) ->
7071 skip_missing_erl_bif_types (Config );
@@ -1780,6 +1781,72 @@ node_error(E0) ->
17801781doctests (_Config ) ->
17811782 shell_docs :test (erlang , []).
17821783
1784+ is_integer_3_test (_Config ) ->
1785+ _ = [is_between_ten (X ) || X <- lists :seq (- 2 , 12 )],
1786+
1787+ false = is_between_ten (0 ),
1788+ true = is_between_ten (1 ),
1789+ true = is_between_ten (10 ),
1790+ false = is_between_ten (11 ),
1791+
1792+ false = is_between_ten (a ),
1793+ false = is_between_ten (5.0 ),
1794+ false = is_between_ten (- 7.0 ),
1795+ false = is_between_ten ([1 ]),
1796+
1797+ _ = [begin
1798+ is_between_negative (X ),
1799+ false = is_between_negative (- X )
1800+ end || X <- lists :seq (- 100 , - 70 )],
1801+
1802+ _ = [is_between_mixed (X ) || X <- lists :seq (- 10 , 10 )],
1803+
1804+ _ = [begin
1805+ is_between_bignum (X ),
1806+ false = is_between_bignum (- X ),
1807+ false = is_between_bignum (X - (1 bsl 64 ))
1808+ end || X <- lists :seq ((1 bsl 64 ) - 3 , (1 bsl 64 ) + 10 )],
1809+
1810+ is_between_badarg (2 , 1.5 , 10.0 ),
1811+ is_between_badarg (2 , 10.0 , 1.5 ),
1812+ is_between_badarg (2 , 1.5 , 10 ),
1813+ is_between_badarg (2 , 1 , 10.0 ),
1814+ is_between_badarg (2 , lower , upper ),
1815+
1816+ ok .
1817+
1818+ - define (IS_BETWEEN_TEST (Name , LB , UB ),
1819+ Name (X0 ) ->
1820+ F = id (is_integer ),
1821+ Lower0 = LB ,
1822+ Upper0 = UB ,
1823+ Lower = id (Lower0 ),
1824+ Upper = id (Upper0 ),
1825+
1826+ X1 = id (X0 ),
1827+ Result = is_integer (X1 , Lower0 , Upper0 ),
1828+ Result = is_integer (X1 , Lower , Upper ),
1829+ Result = apply (erlang , F , id ([X1 , Lower , Upper ])),
1830+ Result = erlang :F (X1 , Lower , Upper ),
1831+
1832+ false = is_integer (id (X1 ), Upper , Lower ),
1833+
1834+ X = id (X1 ),
1835+ Result = is_integer (X ) andalso Lower =< X andalso X =< Upper ,
1836+ Result ).
1837+
1838+ ? IS_BETWEEN_TEST (is_between_ten , 1 , 10 ).
1839+ ? IS_BETWEEN_TEST (is_between_negative , - 89 , - 77 ).
1840+ ? IS_BETWEEN_TEST (is_between_mixed , - 7 , 7 ).
1841+ ? IS_BETWEEN_TEST (is_between_bignum , 1 bsl 64 , (1 bsl 64 ) + 7 ).
1842+
1843+ is_between_badarg (X , A , B ) ->
1844+ F = id (is_integer ),
1845+
1846+ ? assertError (badarg , is_integer (id (X ), id (A ), id (B ))),
1847+ ? assertError (badarg , erlang :F (X , A , B )),
1848+ ? assertError (badarg , apply (erlang , F , id ([X , A , B ]))).
1849+
17831850% % helpers
17841851
17851852wait_until (Fun ) ->
0 commit comments