[erlang-questions] Help me reduce the complexity of this function please... (Possible Erlang Bug?)

Rudolph van Graan <>
Sat Jan 31 12:38:17 CET 2009


I get this error from erlang:

> csn_rmcs_file_SUITE: function test_cancelling_file_process/1+2246:
>   An implementation limit was reached.
>   Try reducing the complexity of this function.
>
>   Instruction: {test,bs_get_integer2,
>                      {f,41},
>                      [{x,952},
>                       1024,
>                       {integer,8},
>                       1,
>                       {field_flags,[unsigned,big]},
>                       {x,1024}]}
>
> make: *** [csn_rmcs_file_SUITE.beam] Error 1

when I compile the file containing this function:

test_cancelling_file_process(doc) ->
   ["Describe the main purpose of test case"];

test_cancelling_file_process(suite) ->
   [];

test_cancelling_file_process(Config) when is_list(Config) ->
   ?line SourceID = params:fget(connid,Config),
   ?line SinkID   = params:fget(sink_id,Config),

   ?line {ok,_SinkSim} = csn_rmcs_sink_simulator:start_link(SinkID, 
[{4406600104006823036,host_referral(150000,"N","Successfull"), 
{2008,1,1}}],pause),

    
testhelper:set_test_app_env(crimson_rmcs_file,processing_concurrency,1),

   csn_rmcs_trans_util:'$reset_rrn_counter'(),
   testhelper:set_test_now_monitored({{2008,06,13},{10,10,10}}),

   ok = write_file("/tmp/inbox/RMCSTRANCOL01012008RMCS1.upload",[<<"H| 
RMCSTRANCOL|RMCS|1|2008/01/01">>,
                                                                 <<"C| 
4406600104006823036|12345|319991001234|ProdID|1.00|debit|00031|test  
description|ref1||||||||||||||||||">>,
                                                                 <<"C| 
4407600104006823036|12345|319991001234|ProdID|1.00|debit|00031|test  
description|ref2||||||||||||||||||">>,
                                                                 <<"C| 
4407600104006823036|12345|319991001234|ProdID|0.50|credit|00031|test  
description|ref3||||||||||||||||||">>,
                                                                 <<"Q| 
4407600104006823036|12345|319991001234|ProdID|1.00|debit|00031|test  
description|ref4||||||||||||||||||">>,
                                                                 <<"Q| 
4407600104006823036|12345|319991001234|ProdID|1.00|debit|00031|test  
description|ref5||||||||||||||||||">>,
                                                                 <<"Q| 
4407600104006823036|12345|319991001234|ProdID|1.00|debit|00031|test  
description|ref6||||||||||||||||||">>,
                                                                 <<"T| 
2|1|3|2.00|0.50">>]),
   file:rename("/tmp/inbox/RMCSTRANCOL01012008RMCS1.upload","/tmp/ 
inbox/RMCSTRANCOL01012008RMCS1.ready"),

   ?line ok = testhelper:wait_until(5,500,fun() -> processing ==  
get_csn_file_status("RMCSTRANCOL01012008RMCS1") end),
   ?line ok = recv_sim_and_ack(1000),
   ?line ok = recv_sim_and_ack(1000),

   ?line {ok,SourceConn} = isoconn:open(dirty,SourceID),
   ?line {atomic,{ok,_}} = gdb:transaction(fun() ->  
isoconn:update(isoconn:fset(SourceConn,enabled,false)) end),
   ?line catch ok = recv_sim_and_ack(1000),

   ?line ok = testhelper:wait_until(20,1000,fun() -> processed ==  
get_csn_file_status("RMCSTRANCOL01012008RMCS1") end),

   {ok,[
        <<"H|RMCSTRANRES|PMT|1|2008/01/01">>,
        <<"C|4406600104006823036|12345|319991001234|ProdID|1.00|debit| 
00031|test description|ref1||unprocessed|ISO RESPONSE CODE: 92|| 
RM0613000001||||||||||||">>,
        <<"C|4406600104006823036|12345|319991001234|ProdID|1.00|debit| 
00031|test description|ref2||paid|Successfull|2008/01/01|RM0613000002| 
1006600100001206196|TLOURRA MR TSHEPIS|6122304055443083|1500.00| 
0330000|0.
        <<"C|4406600104006823036|12345|319991001234|ProdID|0.50|credit| 
00031|test description|ref3||unprocessed|ISO RESPONSE CODE: 900| 
2008/01/01|RM0613000003|1006600100001206196|TLOURRA MR TSHEPIS| 
6122304055443083
        <<"Q|4406600104006823036|12345|319991001234|ProdID|1.00|debit| 
00031|test description|ref4||unprocessed|ISO RESPONSE CODE:  
900||||||||||||||">>,
        <<"Q|4406600104006823036|12345|319991001234|ProdID|1.00|debit| 
00031|test description|ref5||unprocessed|ISO RESPONSE CODE:  
900||||||||||||||">>,
        <<"Q|4406600104006823036|12345|319991001234|ProdID|1.00|debit| 
00031|test description|ref6||unprocessed|ISO RESPONSE CODE:  
900||||||||||||||">>,
        <<"T|2|1|3|2.00|0.50">>,
        <<>>
       ]} = read_file("/tmp/outbox/RMCSTRANRES01012008PMT1.ready"),
   ok.

Thanks!

Rudolph van Graan










More information about the erlang-questions mailing list