[prev in list] [next in list] [prev in thread] [next in thread] 

List:       9fans
Subject:    Re: [9fans] acid question
From:       Philippe Anel <xigh () bouyapop ! org>
Date:       2010-07-17 17:58:35
Message-ID: 4C41EF4B.300 () bouyapop ! org
[Download RAW message or body]

  Not needed in my opinion. Acid can also helps.
If we decide that function marked for unit testing with a known regexp 
such as ending by _Test ...

defn utest()
{
     sl = symbols;
     while sl do {
         s = head sl;
         if (regexp(".*_Test", s[0])) then {
             call(s[2]);
         }
         sl = tail sl;
     }
}

This would call every function whose name is ending with _Test.

Phil;


On 7/17/2010 7:23 PM, Skip Tavakkolian wrote:
> nice.  i'll give it a try later.
>
> thinking outloud here; it seems that one could extend the capability
> of ?c for generating acid code to include creating call wrapper
> for any function that is marked for unit testing (perhaps another
> #pragma?)
>
>> This one sounds like to work (except it does not save registers) ...
>>
>> defn call(addr)
>> {
>> 	local pco;
>>
>> 	// we need stack space, and thus process stopped.
>> 	if status(pid) != "Stopped" then {
>> 		print("Waiting...\n");
>> 		stop(pid);
>> 	}
>>
>> 	// Backup orginal instruction
>> 	pco = fmt(*PC, bpfmt);
>>
>> 	// Put a temporary breakpoint
>> 	**PC = bpinst;
>> 	
>> 	// update stack pointer
>> 	*SP = *SP - 4;
>>
>> 	// make called function returning to this point
>> 	**SP = *PC;
>>
>> 	// set PC to function to call
>> 	*PC = addr;
>>
>> 	// do the call
>> 	startstop(pid);
>>
>> 	// restore original instruction
>> 	*PC = pco;
>> }
>>
>> Phil;
>
>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic