I don't know what the question is.  You can `git grep PETSC_ERR_PLIB` for 
places where we are checking for corruption in something that PETSc has 
produced.  When those checks are expensive (like checking if indices are 
sorted), they use `if (PetscUnlikelyDebug(cond)) { ... }` or `if 
(PetscDefined(HAVE_DEBUG)) { ... }`.

Jacob Faibussowitsch <[email protected]> writes:

> Hello All,
>
> How far should one go in error checking when using #if 
> defined(PETSC_USE_DEBUG)? So far I have gone with the mantra that internal 
> petsc routines (including ones authored by myself) should be considered 
> infallible and that I should only be checking for garbage *input* from the 
> user. But there is not a person in existence that doesn’t write buggy code, 
> as evidenced by the somewhat routine “fixing bug in XYZ” merge requests one 
> sees. 
>
> On the other hand it is also not reasonable to check every single output with 
> a fine-tooth comb because for the majority of cases code written by petsc 
> developers is working as intended. Take for example writing an array sorting 
> algorithm. Since every operation is "performance critical” these are often 
> written in less logical or less readable formats leading to some subtle bugs 
> that the writer doesn’t immediately catch. If these remain uncaught through 
> CI/CD and then bleeds into a user code I see absolutely no chance of the user 
> (or even other devs) ever being able to identify that the sorting algorithm 
> deep in some function stack is the one producing the bug without significant 
> effort. One could include a “dumb” version of the same algorithm that checks 
> a copy of the initial array for missing/misplaced elements but as mentioned 
> above this is a pointless slowdown 99% of the time. 
>
> CI/CD -- while excellent at catching a lot of machine-specific bugs -- isn’t 
> bulletproof either. It relies on the assumption that the writer knows all 
> possible sources of bugs in their code and provides a test case for each, but 
> to quote Isaac Newton “what we know is a drop, what we don’t know is an 
> ocean”. I have been mulling over this problem for a while now, and have 
> looked through the user manual/developers manual but have not found a 
> definitive answer. 
>
> Best regards,
>
> Jacob Faibussowitsch
> (Jacob Fai - booss - oh - vitch)
> Cell: (312) 694-3391

Reply via email to