Sha256: b76e110b5d764d6b06047551fd676ffa29fb7e251466b6370d6111b7cb0ae592

Contents?: true

Size: 1.11 KB

Versions: 3

Compression:

Stored size: 1.11 KB

Contents

#! /usr/bin/env escript

main([]) ->
    code:add_pathz("ebin/"),
    Cases = read_cases("test/timing.json"),
    io:format("Timing runs...~n", []),
    run(ejson, Cases),
    run(mochijson2, Cases),
    run(rfc4627, Cases).

run(Module, Cases) ->
    F = fun() ->
        lists:foreach(fun(_) ->
           lists:map(fun(C) -> Module:decode(C) end, Cases)
        end, lists:seq(1, 2000))
    end,
    io:format("~p => ~p~n", [Module, timed(F)]).

timed(Func) ->
    Start = micro(),
    Func(),
    End = micro(),
    (End-Start)/1000000.

micro() ->
    {Mega, Secs, Micro} = erlang:now(),
    (Mega * 1000000 + Secs) * 1000000 + Micro.

read_cases(FName) ->
    {ok, Data} = file:read_file(FName),
    read_cases(Data, [], []).

read_cases(Data, Curr, Acc) ->
    case Data of
        <<>> ->
            Case = list_to_binary(lists:reverse(Curr)),
            lists:reverse([Case | Acc]);
        <<"---", Rest/binary>> ->
            Case = list_to_binary(lists:reverse(Curr)),
            read_cases(Rest, [], [Case | Acc]);
        <<First:8/integer, Rest/binary>> ->
            read_cases(Rest, [First | Curr], Acc)
    end.

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
capricorn-2.0.11 erlang/lib/ejson/test/timing.escript
capricorn-2.0.10 erlang/lib/ejson/test/timing.escript
capricorn-2.0.9 erlang/lib/ejson/test/timing.escript