use Test::More;
# These tests try to make sure that objects are destroyed when they
# fall out of scope; these requires avoiding circular strong references
use strict;
use warnings;
use Chemistry::Ring;
plan tests => 10;
#plan 'no_plan';
my $dead_atoms = 0;
my $dead_bonds = 0;
my $dead_mols = 0;
my $dead_rings = 0;
my $badatom;
{
# make a cyclopropane
my $mol = Chemistry::Mol->new;
$mol->new_atom(symbol => 'C');
$mol->new_atom(symbol => 'C');
$mol->new_atom(symbol => 'C');
$mol->new_bond(atoms => [$mol->atoms(1,2)]);
$mol->new_bond(atoms => [$mol->atoms(2,3)]);
$mol->new_bond(atoms => [$mol->atoms(3,1)]);
isa_ok( $mol, 'Chemistry::Mol' );
is( scalar $mol->atoms, 3, 'atoms before');
Chemistry::Ring::aromatize_mol($mol);
is( $dead_atoms, 0, "before gc - atoms" );
is( $dead_bonds, 0, "before gc - bonds" );
is( $dead_mols, 0, "before gc - mols" );
is( $dead_rings, 0, "before gc - rings" );
}
is( $dead_atoms, 3, "after gc - atoms" );
is( $dead_bonds, 3, "after gc - bonds" );
is( $dead_mols, 1, "after gc - mols" );
is( $dead_rings, 1, "after gc - rings" );
sub Chemistry::Mol::DESTROY { $dead_mols++ }
sub Chemistry::Atom::DESTROY { $dead_atoms++ }
sub Chemistry::Bond::DESTROY { $dead_bonds++ }
sub Chemistry::Ring::DESTROY { $dead_rings++ }