Test coverage - Almost all of score.c
[open-adventure.git] / notes.adoc
index fd3504a6f2ce68a4d62668690e3b4542f0cf070e..1baf354d694a667a9c81a3049765ad15048d1587 100644 (file)
@@ -73,6 +73,9 @@ necessarily pretty ugly by modern standards. Encryption and
 checksumming have been discarded - it's pointless to try
 tamper-proofing saves when everyone has the source code.
 
 checksumming have been discarded - it's pointless to try
 tamper-proofing saves when everyone has the source code.
 
+A -r command-line been added. When it is given (with a file path
+argument) it is functionally equivalent to a RESTORE command.
+
 == Translation ==
 
 The 2.5 code was a mechanical C translation of a FORTRAN original.
 == Translation ==
 
 The 2.5 code was a mechanical C translation of a FORTRAN original.
@@ -82,14 +85,14 @@ ugly and quite unreadable.
 Jason Ninneman and I have moved it to what is almost, but not quite,
 idiomatic modern C.  We refactored the right way, checking correctness
 against a comprehensive test suite that we built first and verified
 Jason Ninneman and I have moved it to what is almost, but not quite,
 idiomatic modern C.  We refactored the right way, checking correctness
 against a comprehensive test suite that we built first and verified
-with coverage tools (we have 88% coverage, with the remaining 12%
-confined to exception cases that are difficult to reach). This is
+with coverage tools (we now have over 90% coverage, with the remaining
+confined to exception cases that are very difficult to reach). This is
 what you are running when you do "make check".
 
 what you are running when you do "make check".
 
-This move entailed some structural changes.  The most important was
-the refactoring of over 350 gotos into if/loop/break structures.  We
-also abolished almost all shared globals; the main one left is a
-struct holding the game's saveable/restorable state.
+The move to modern C entailed some structural changes.  The most
+important was the refactoring of over 350 gotos into if/loop/break
+structures.  We also abolished almost all shared globals; the main one
+left is a struct holding the game's saveable/restorable state.
 
 The original code was greatly complicated by a kind of bit-packing
 that was performed because the FORTRAN it was written in had no string
 
 The original code was greatly complicated by a kind of bit-packing
 that was performed because the FORTRAN it was written in had no string
@@ -105,6 +108,11 @@ in favor of proper C strings.  C strings may be a weak and leaky
 abstraction, but this is one of the rare cases in which they are
 an obvious improvement over what they're displacing... 
 
 abstraction, but this is one of the rare cases in which they are
 an obvious improvement over what they're displacing... 
 
+We have also conducted extensive fuzz testing on the game using
+afl (American Fuzzy Lop).  We've found and fixed some crashers in
+our new code (which occasionally uses malloc(3)) but none as yet
+in Don's old code (which didn't).
+
 The code falls short of being fully modern C in the following
 ways:
 
 The code falls short of being fully modern C in the following
 ways:
 
@@ -114,9 +122,9 @@ ways:
   and the choice to refrain will make forward translation into future
   languages easier.
 
   and the choice to refrain will make forward translation into future
   languages easier.
 
-* There are a few gotos left that resist restructuring; all of these
-  are in the principal command interpreter function implementing its
-  state machine.
+* There are a few gotos left that resist restructuring; all are in the
+  principal command interpreter function implementing its state
+  machine.
 
 * Linked lists (for objects at a location) are implemented using an array
   of link indices. This is a surviving FORTRANism that is quite unlike
 
 * Linked lists (for objects at a location) are implemented using an array
   of link indices. This is a surviving FORTRANism that is quite unlike
@@ -124,9 +132,6 @@ ways:
   to fix it because doing so would (a) be quite difficult, and (b)
   compromise forward-portability to other languages.
 
   to fix it because doing so would (a) be quite difficult, and (b)
   compromise forward-portability to other languages.
 
-* The code still has an unfortunately high density of magic numbers - in
-  particular, numeric object IDs.  There are plans to fix this.
-
 * Much of the code still uses FORTRAN-style uppercase names.
 
 * The code still assumes one-origin array indexing.  Thus, arrays are
 * Much of the code still uses FORTRAN-style uppercase names.
 
 * The code still assumes one-origin array indexing.  Thus, arrays are