mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
* Add ".es" to recognised JavaScript extensions * Add heuristic to differentiate Erlang from ECMAScript * Add test-case for .es heuristic
105 lines
2.0 KiB
Erlang
Executable File
105 lines
2.0 KiB
Erlang
Executable File
#! /usr/bin/env escript
|
|
% This file is part of Emonk released under the MIT license.
|
|
% See the LICENSE file for more information.
|
|
|
|
main([]) ->
|
|
start(64, 1000);
|
|
main([N]) ->
|
|
start(list_to_integer(N), 1000);
|
|
main([N, M]) ->
|
|
start(list_to_integer(N), list_to_integer(M)).
|
|
|
|
|
|
start(N, M) ->
|
|
code:add_pathz("test"),
|
|
code:add_pathz("ebin"),
|
|
{ok, Ctx} = emonk:create_ctx(),
|
|
{ok, undefined} = emonk:eval(Ctx, js()),
|
|
run(Ctx, N, M),
|
|
wait(N).
|
|
|
|
run(_, 0, _) ->
|
|
ok;
|
|
run(Ctx, N, M) ->
|
|
Self = self(),
|
|
Pid = spawn(fun() -> do_js(Self, Ctx, M) end),
|
|
io:format("Spawned: ~p~n", [Pid]),
|
|
run(Ctx, N-1, M).
|
|
|
|
wait(0) ->
|
|
ok;
|
|
wait(N) ->
|
|
receive
|
|
{finished, Pid} -> ok
|
|
end,
|
|
io:format("Finished: ~p~n", [Pid]),
|
|
wait(N-1).
|
|
|
|
do_js(Parent, _, 0) ->
|
|
Parent ! {finished, self()};
|
|
do_js(Parent, Ctx, M) ->
|
|
io:format("Running: ~p~n", [M]),
|
|
Test = random_test(),
|
|
{ok, [Resp]} = emonk:call(Ctx, <<"f">>, [Test]),
|
|
Sorted = sort(Resp),
|
|
true = Test == Sorted,
|
|
do_js(Parent, Ctx, M-1).
|
|
|
|
js() ->
|
|
<<"var f = function(x) {return [x];};">>.
|
|
|
|
random_test() ->
|
|
Tests = [
|
|
null,
|
|
true,
|
|
false,
|
|
1,
|
|
-1,
|
|
3.1416,
|
|
-3.1416,
|
|
12.0e10,
|
|
1.234E+10,
|
|
-1.234E-10,
|
|
10.0,
|
|
123.456,
|
|
10.0,
|
|
<<"foo">>,
|
|
<<"foo", 5, "bar">>,
|
|
<<"">>,
|
|
<<"\n\n\n">>,
|
|
<<"\" \b\f\r\n\t\"">>,
|
|
{[]},
|
|
{[{<<"foo">>, <<"bar">>}]},
|
|
{[{<<"foo">>, <<"bar">>}, {<<"baz">>, 123}]},
|
|
[],
|
|
[[]],
|
|
[1, <<"foo">>],
|
|
{[{<<"foo">>, [123]}]},
|
|
{[{<<"foo">>, [1, 2, 3]}]},
|
|
{[{<<"foo">>, {[{<<"bar">>, true}]}}]},
|
|
{[
|
|
{<<"foo">>, []},
|
|
{<<"bar">>, {[{<<"baz">>, true}]}}, {<<"alice">>, <<"bob">>}
|
|
]},
|
|
[-123, <<"foo">>, {[{<<"bar">>, []}]}, null]
|
|
],
|
|
{_, [Test | _]} = lists:split(random:uniform(length(Tests)) - 1, Tests),
|
|
sort(Test).
|
|
|
|
sort({Props}) ->
|
|
objsort(Props, []);
|
|
sort(List) when is_list(List) ->
|
|
lstsort(List, []);
|
|
sort(Other) ->
|
|
Other.
|
|
|
|
objsort([], Acc) ->
|
|
{lists:sort(Acc)};
|
|
objsort([{K,V} | Rest], Acc) ->
|
|
objsort(Rest, [{K, sort(V)} | Acc]).
|
|
|
|
lstsort([], Acc) ->
|
|
lists:reverse(Acc);
|
|
lstsort([Val | Rest], Acc) ->
|
|
lstsort(Rest, [sort(Val) | Acc]).
|