mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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]).
 |