On Fri, Dec 8, 2017 at 10:10 AM, Erik Bray <erik.m.b...@gmail.com> wrote:
> On Thu, Dec 7, 2017 at 12:56 AM, Michael Orlitzky <mich...@orlitzky.com> 
> wrote:
>> On 12/06/2017 09:49 AM, Erik Bray wrote:
>>>
>>> Did anyone ever think up a better solution to this?
>>>
>>
>> Whatever you do, you wind up with a big pile of dict output in the
>> middle of your test case. So (where possible) you might as well use that
>> space to define a new dict containing the expected value. For example,
>>
>>   >>> actual = some_computation()
>>   >>> expected = { 1: "one",
>>   ...              2: "two",
>>   ...              9: "nine" }
>>   >>> actual == expected
>>   True
>>
>> That's harder to do when the dict is buried in some other data
>> structure, but maybe we shouldn't be testing the exact string
>> representation of some big conglomerate in the first place -- do we
>> actually care what it is? Instead, we should test only what we care about.
>>
>> Regardless, I don't think the framework should make it look like you can
>> rely on dicts being sorted when you can't. Users should be able to run
>> the EXAMPLES and see what we say they'll see.
>
> That is a good thing and a bad thing about so many of the tests
> doubling as "examples" in the documentation (especially for 'public'
> methods to the extent that there is such a thing).  You want them to
> actually function nicely as examples of how a user should use an
> interface and what a user should expect to see.  Going into
> contortions in order to make it function reliably as a test can be at
> odds with that.
>
> If we're talking one dict it's not much of a problem.  The main
> problem seems to be with more complex objects that contain dicts
> nested in their reprs.  And you do sometimes want to test the repr
> string itself too (that, however, could be in the form of a TEST not
> an EXAMPLE).

Another workaround that's so obvious I smacked myself on the head is
that for many cases, particularly objects that have a small dict in
their representation, is to simply change the __repr__ so that its
dict is always displayed sorted.  If the order doesn't matter anyways
that it doesn't hurt to impose an order at least for the __repr__.  I
doubt there are many cases where this should have any performance
impact either.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to