It’s been noted a couple times the 721 suite is lacking in some aspects: though the contracts have full line coverage, adding or modifying tests is somewhat cumbersome, and it’s not easy to see which edge cases have been tested and which ones haven’t. We should collect ideas on this topic before moving forward with the test files themselves.
Something I’d like to see added is some poking around possible edge cases for the implementation:
IERC721Enumerable lends itself to multiple arrays and mappings, which require non-trivial techniques due to gas limitations (e.g. removal via swap-and-pop as opposed to
memmove). These can be tricky to get right, and we should add explicit tests for scenarios such as removal of array with single element, removal of last element in array, etc.
ArrayUtils may eventually come in handy for this.