1. Program Correctness (60%): The programs do everything that the lab requires. If you have a question about how a program handles a certain input, check the executables that have been provided. Deduct 20 points for not using my dllist interface.

    1. Part 1 (16 points) -- Dllist Implementation: Award 16 points if the student's photo_sorter works properly. If the student's photo_sorter does not work properly, then test it with your photo_sorter. Each working routine (dll_prepend, dll_append, dll_insert_after, and dll_delete) is worth 4 points.
    2. photo_sorter (20 points):
      1. normal cases
        1. (2 points) append works (a set of append commands only)
        2. (2 points) prepend works (a set of prepend commands only)
        3. (2 points) insert_after works: use a command to create a one item list (either append or prepend), and then multiple insert_after commands
        4. (2 points) delete works: use a number of commands to create a list with a few elements, then a number of delete commands
        5. (2 points) a mixed set of commands works
      2. boundary conditions
        1. (1 points) a mixed set of commands that ultimately leads to an empty list (i.e., a series of delete commands wipes out the list's elements), and then starts inserting new elements into the list again.
        2. (1 points) no commands
        3. (2 points) create a very large list
        4. (1 points) put a blank line in the commands
        5. (1 points) have a before command insert before the first photo in the list
        6. (1 points) have an after command insert after the last photo in the list
      3. error conditions
        1. (1 points) invalid command
        2. (1 points) wrong number of arguments to a command (you only need to test one command)
        3. (1 points) for a insert_before, insert_after, or delete command, the target photo does not exist (you only need to test one command)
    3. linenum (24 points):
      1. normal cases
        1. (3 points): a file with a single line and unique words
        2. (3 points): a file with multiple lines and unique words
        3. (3 points): a file with multiple lines and words that appear on multiple lines. However, no word is duplicated on the same line.
        4. (3 points): a file with multiple lines, words that appear on multiple lines, and words that are duplicated on lines
        5. (4 points): a very large file with multiple lines and duplicates
        6. (2 points): an empty file
      2. formatting
        1. (2 points) words are left justified in a 10 character wide field
        2. (2 points) line numbers are right justified in a 4 digit wide field
      3. error conditions
        1. (1 point) handles wrong number of command line arguments
        2. (1 point) handles filenames that do not exist

  2. Design Document (15%): Refer to my design document for the following discussion:
    1. photo_sorter (5 points)
      1. error conditions (3 points): Award 3 points if the student enumerated 2/3 of the error conditions. Award 1 point if the student enumerated 1/3 of the error conditions.
      2. Boundary Conditions (2 points): Award 2 points if the student enumerated at least 2/6 of the boundary conditions. Award 1 point if the student enumerated 1/6 of the boundary conditions.
    2. linenum (10 points)
      1. error conditions (2 points): Award 1 point for each of the two error conditions that I identified
      2. boundary conditions: Don't check these. They were a bit nebulous
      3. picture of data structures (4 points): Award 4 points for something reasonably correct. Use your judgement to award points if it isn't reasonably correct.
      4. design steps (4 points): Award 4 points for something reasonably correct. Use your judgement to award points if it isn't reasonably correct.

    3. Commenting (15%): See the commenting information on the course's lab web page for advice on how to comment your programs,

    4. Program Style (10%): Are the programs well-organized and do they solve the problem in the most straightforward, efficient way possible?