www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Module-level attributes and unit tests

reply Leandro Motta Barros via Digitalmars-d-learn writes:
Hello,

I have a module which is completelly  nogc, and as such I'd like to just say

    nogc:

at the top of the file and be happy.

However, my unit tests for this same module do some GC allocation, so the
module fails to compile.

Is there a way to disable  nogc for the unit tests only? Would this be a
bad idea in some way I cannot see?

I suppose the same question is valid for other attributes, like 'nothrow'
and ' safe'.

Thank you,

LMB
Aug 23 2014
parent reply "monarch_dodra" <monarchdodra gmail.com> writes:
On Saturday, 23 August 2014 at 15:26:02 UTC, Leandro Motta Barros 
via Digitalmars-d-learn wrote:
 Hello,

 I have a module which is completelly  nogc, and as such I'd 
 like to just say

     nogc:

 at the top of the file and be happy.

 However, my unit tests for this same module do some GC 
 allocation, so the
 module fails to compile.

 Is there a way to disable  nogc for the unit tests only? Would 
 this be a
 bad idea in some way I cannot see?
Nope. At best, you might be able to *declare* a function that is GC, but even then, you wouldn't be able to call it.
 I suppose the same question is valid for other attributes, like 
 'nothrow'
 and ' safe'.
Actually, you can "undo" safe with an explicit system. nothrow (and pure) are in the same boat as nogc
 Thank you,

 LMB
Solutions I can see would be to: a) Put your unittests in a separate module. b) Place your unittests before your " nogc:" c) Instead of using " nogc:", use " nogc {}": This will make nogc run until the end of the block.
Aug 23 2014
parent Leandro Motta Barros via Digitalmars-d-learn writes:
Thanks, this was helpful!

LMB


On Sat, Aug 23, 2014 at 1:22 PM, monarch_dodra via Digitalmars-d-learn <
digitalmars-d-learn puremagic.com> wrote:

 On Saturday, 23 August 2014 at 15:26:02 UTC, Leandro Motta Barros via
 Digitalmars-d-learn wrote:

 Hello,

 I have a module which is completelly  nogc, and as such I'd like to just
 say

     nogc:

 at the top of the file and be happy.

 However, my unit tests for this same module do some GC allocation, so the
 module fails to compile.

 Is there a way to disable  nogc for the unit tests only? Would this be a
 bad idea in some way I cannot see?
Nope. At best, you might be able to *declare* a function that is GC, but even then, you wouldn't be able to call it. I suppose the same question is valid for other attributes, like 'nothrow'
 and ' safe'.
Actually, you can "undo" safe with an explicit system. nothrow (and pure) are in the same boat as nogc Thank you,
 LMB
Solutions I can see would be to: a) Put your unittests in a separate module. b) Place your unittests before your " nogc:" c) Instead of using " nogc:", use " nogc {}": This will make nogc run until the end of the block.
Aug 23 2014