def tearDown(self):
     cleaned_up = []
     for v in RPiPinIdSet.valid_ids(pingroup.PinId._get_rpi_major_revision_index()):
         id = force_free_pin(pingroup.PinId.gpio(v))
         if (id!=None):
             cleaned_up.append(id)
     if ( cleaned_up != [] ):
         print "\nCleaned up left over exports for pins", cleaned_up
     self.assertEqual(cleaned_up,[])
        assert( not p.closed() )
        assert( not outside_value.closed() )
    assert( outside_value.closed() )

if __name__ == '__main__':
    try:
        open_pin_explicit_close()    
        open_pingroup_explicit_close()    

        with_open_pin_closed_in_with_clause_exit_cleanup()
        with_open_pingroup_closed_in_with_clause_exit_cleanup()

        open_pin_implicit_close(pin.PinId.p1_gpio_gen1())
    # Check requested pin opened by open_pin_implicit_close is closed
    # by checking return value from pin.force_free_pin:
        freed_pin_id = pin.force_free_pin(pin.PinId.p1_gpio_gen1())
        assert( freed_pin_id==None )

        open_pingroup_implicit_close( [ pin.PinId.p1_gpio_gen0()
                                      , pin.PinId.p1_gpio_gen1()
                                      ]
                                    )
    # Check requested pins opened by open_pingroup_implicit_close are closed
    # by checking return value from pin.force_free_pin:
        freed_pin_id = pin.force_free_pin(pin.PinId.p1_gpio_gen0())
        assert( freed_pin_id==None )
        freed_pin_id = pin.force_free_pin(pin.PinId.p1_gpio_gen1())
        assert( freed_pin_id==None )

    except error.GPIOError,e:
        print "Oops unexpected GPIO related error:\n   ",\