RT# 50541: Fix for clear bug. Introduces a speed regression
[dbsrgits/DBM-Deep.git] / t / 02_hash.t
index a317fa3..774ab49 100644 (file)
@@ -4,6 +4,7 @@ use warnings FATAL => 'all';
 use Test::More;
 use Test::Exception;
 use t::common qw( new_dbm );
+use Scalar::Util qw( reftype );
 
 use_ok( 'DBM::Deep' );
 
@@ -139,6 +140,7 @@ while ( my $dbm_maker = $dbm_factory->() ) {
     # Test autovivification
     $db->{unknown}{bar} = 1;
     ok( $db->{unknown}, 'Autovivified hash exists' );
+    is( reftype($db->{unknown}), 'HASH', "... and it's a HASH" );
     cmp_ok( $db->{unknown}{bar}, '==', 1, 'And the value stored is there' );
 
     # Test failures
@@ -175,4 +177,23 @@ while ( my $dbm_maker = $dbm_factory->() ) {
     } qr/Cannot use an undefined hash key/, "EXISTS fails on an undefined key";
 }
 
+{
+    # RT# 50541 (reported by Peter Scott)
+    # clear() leaves one key unless there's only one
+    my $dbm_factory = new_dbm();
+    while ( my $dbm_maker = $dbm_factory->() ) {
+        my $db = $dbm_maker->();
+
+        $db->{block} = { };
+        $db->{critical} = { };
+        $db->{minor} = { };
+
+        cmp_ok( scalar(keys( %$db )), '==', 3, "Have 3 keys" );
+
+        $db->clear;
+
+        cmp_ok( scalar(keys( %$db )), '==', 0, "clear clears everything" );
+    }
+}
+
 done_testing;