Okay, this sounds just crushingly obvious now that I say it, but honestly, I 
don’t think it’s occurred to me: 

One reason that equality is such a nightmare in Java and Python (which turns 
out to be JUST AS BAD), is that those of us that actually want to write unit 
test cases want *intensional* equality, not extensional equality—but not 
pointer-based equality.

I just came across a nice example while working on code for first-year students 
(thanks, Aaron!).

Specifically, imagine an “array” class that contains a backing array and a 
length, where the backing array might be arbitrarily longer than the length:

(struct arr (vec len))

So, for instance, an array with two elements in it might be represented as 

(arr (vector “apple" “horse” #f #f #f) 2)

or as

(arr (vector “apple” “horse” #f) 2)

—they both represent the array of length 2 that has “apple” as the first 
element, and “horse” as the second.

If I’m providing this library to be used by others, I probably want extensional 
equality; I don’t want users of my library to be able to distinguish between 
the two. However, if I’m writing unit tests for my library, I definitely *do* 
want to be able to distinguish between the two, for instance in checking the 
behavior of arrays that fill up and need to be resized. Moreover, pointer-based 
equality—the == of Java, and the `is` of Python (IIUC)—is also largely useless 
for unit tests.

It’s probably not terribly controversial to suggest that neither Python nor 
Java were designed with unit testing in mind. Accordingly, I shouldn’t be 
surprised to discover that they don’t provide a natural notion of equality that 
fits well with unit tests.

So, I have three questions:

1) Is there an existing term for what I would call “functional extensional 
equality”—that is, Racket’s ‘equal?’ ?
2) Does what I wrote make sense?
3) Has this been written down somewhere else, as part of a larger work?

Thanks, everyone!


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

Reply via email to