Bug #1 (testcase #2): I originally used all 83 printable characters on my keyboard (other than 0..9 and -) as feature names. This worked fine for output. But as input, for example -w1a2>3b, the shell interpreted some characters in unpleasant ways. I fixed this by limiting vectors to 52 features apiece (named a..zA..Z).

Bug #2 (testcase #10): If jenny can't cover a tuple after trying really hard, it gives up and declares that tuple to be an implicit restriction. Correctly deducing implicit restrictions is an NP-complete problem. (If all vectors have 2 features each and all restrictions mention 3 dimensions each, it's identical to 3SAT.) So I know that implicit restriction deduction isn't going to work perfectly. But "trying really hard" was defined as trying 20 times, which wasn't really hard enough. I bumped it up to 100. That eliminated most of the false positives and didn't hurt the running time too much.

Bug #3 (testcase #11): jenny believed it couldn't enumerate all the tuples to be covered in memory, so it generated a bunch of random testcases until it estimated it could store all the uncovered tuples in memory. As it happened all but three possible testcases were restricted, so those three testcases were duplicated many times. I bumped up the number of tuples jenny believed it could store in memory.

Bug #4 (testcase #11): Same as #3, except the whole idea of generating random testcases in rare cases seems bad. I eliminated it.

Bug #5 (testcase #13): A hang. Another problem with generating random testcases eliminated when fixing bug #4. Since there is no tuple they are trying to cover, they never generate an implicit restriction. If all testcases are impossible, the random testcase generator never notices, it just keeps trying. Eliminating random testcase generation for bug #4 fixed this hang too.

Bug #6 (testcase #13): The hang sometimes happened, sometimes didn't. jenny is supposed to be deterministic. This command was nowhere near having all testcases impossible, so the hang described in bug #5 shouldn't have happened. I haven't investigated this yet.

Bug #7 (testcase #35): What is the meaning of -w2ab2bc? Is it the same as -w2ab, -w2bc, -w2abc, or -w2b? The definition of restrictions suggests it should mean -w2b. The code evaluates it as -w2abc. The most usable interpretation is either -w2abc or -w2bc. Since there's no obviously correct interpretation, and since there's really no need to allow this, jenny ought to signal an error here. Fixed, now it signals an error.

Other known bugs

For -n# and # for dimensions, stray characters following the number are blissfully ignored. jenny couldn't ever catch this because this is something that succeeds that isn't supposed to. jenny can only catch thing that are supposed to work but don't.