1. Program Correctness (75%): 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 and 20 points for not using my stack interface.

    1. Part 1 (20 points) -- Dllist Implementation: Award 20 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 5 points.
    2. Part 2 (20 points) --photo_sorter
      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. Part 3 (20 points)--Stack Implementation
      1. new_stack (3 points)
      2. free_stack (2 points)
      3. push (5 points)
      4. pop (5 points)
      5. top (3 points)
      6. empty (2 points)
    4. Part 4 (15 points)--call_stack
      1. works correctly on normal cases (10 points)
      2. error checking (5 points)
        1. (1 point) Ensure there are an appropriate number of command line arguments
        2. (2 points) Ensure that a function has been defined before calling it. If a function is not defined, print an error message and quit.
        3. (1 point) Make sure that the user defined main. This will need to be a special check just before main is pushed onto the call stack. This check handles the special case of an empty file.
        4. (1 point) Make sure that when a function is defined, that the user has not previously defined the same function. For example, if the user is defining function B, make sure that B has not been previously defined.

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

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