This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
haas:summer2015:data:projects:sll3 [2015/05/29 14:52] – [List library unit tests] wedge | haas:summer2015:data:projects:sll3 [2015/06/01 21:12] (current) – [list library] wedge | ||
---|---|---|---|
Line 14: | Line 14: | ||
=====Objective===== | =====Objective===== | ||
- | In this project, | + | This is a transitional |
+ | |||
+ | As such, while this is a standalone project, it should be considered a small one, and one that is given out in combination with another (again: **sll4**), so be mindful of time management. | ||
+ | |||
+ | You will need to complete this project prior to upgrading to **sll4**. | ||
- | So what does this give us? An organizing unit for lists! I'm calling them " | ||
=====Project Overview===== | =====Project Overview===== | ||
Line 37: | Line 40: | ||
**mklist()** should also set the list's **after** pointer to a sane initial state (NULL). | **mklist()** should also set the list's **after** pointer to a sane initial state (NULL). | ||
- | |||
- | ====group.h==== | ||
- | With the updated list struct (and supporting list functions), we can now organize our lists with this new groupoflists struct (typedef' | ||
- | |||
- | <code c> | ||
- | #ifndef _GROUP_H | ||
- | #define _GROUP_H | ||
- | |||
- | #include " | ||
- | |||
- | struct groupoflists { | ||
- | List *first; | ||
- | List *last; | ||
- | }; | ||
- | typedef struct groupoflists Group; | ||
- | |||
- | Group *mkgroup(void); | ||
- | Group *rmgroup(Group *); // clear/ | ||
- | |||
- | Group *linsert(Group *, List *, List *); // add list before given list | ||
- | Group *lappend(Group *, List *, List *); // add list after given list | ||
- | Group *lobtain(Group *, List **); // obtain/ | ||
- | |||
- | long int ldisplay(Group *, long int); // display entire/ | ||
- | |||
- | long int lgetpos(Group *, List *); // retrieve position from given node | ||
- | List | ||
- | |||
- | #endif | ||
- | </ | ||
- | |||
- | You should notice a striking similarity to the core list functionality (a first and a last pointer-- only to Lists, and not Nodes), and the presence of Group manipulation and utility functions (appending, inserting, obtaining, displaying, getting/ | ||
- | |||
- | This project will test the level of your abstraction skills-- for there isn't that much of a conceptual difference between the list functions and the group functions. The more you understand that, the easier this project will be. | ||
- | ====group library==== | ||
- | In **src/ | ||
- | |||
- | * **obtain.c** | ||
- | * **pos.c** | ||
- | * **mk.c** | ||
- | * **rm.c** | ||
- | * **insert.c** | ||
- | * **append.c** | ||
- | * **display.c** | ||
- | |||
- | Take a look at the code there. These are the files that contain functions which will be compiled and archived into the group library (**libgroup.a**) we will be using in this and future projects. | ||
- | |||
- | Figure out what is going on, make sure you understand it. | ||
- | |||
- | ====List library unit tests==== | ||
- | In **unit/ | ||
- | |||
- | These are complete runnable programs (when compiled, and linked against the group library, which is all handled for you by the **Makefile** system in place). | ||
- | |||
- | Of particular importance, I want you to take a close look at: | ||
- | |||
- | * the source code to each of these unit tests | ||
- | * the purpose of these programs is to validate the correct functionality of the respective library functions | ||
- | * follow the logic | ||
- | * make sure you understand what is going on | ||
- | * ask questions to get clarification! | ||
- | * the output from these programs once compiled and ran | ||
- | * analyze the output | ||
- | * make sure you understand what is going on | ||
- | * ask questions to get clarification! | ||
- | |||
=====Expected Results===== | =====Expected Results===== | ||
To assist you in verifying a correct implementation, | To assist you in verifying a correct implementation, | ||
- | |||
- | ====node library==== | ||
- | Here is what you should get for the node library: | ||
- | |||
- | <cli> | ||
- | lab46: | ||
- | ==================================================== | ||
- | = Verifying Singly-Linked Node Functionality | ||
- | ==================================================== | ||
- | | ||
- | | ||
- | | ||
- | ==================================================== | ||
- | [RESULTS] Total: | ||
- | ==================================================== | ||
- | lab46: | ||
- | </ | ||
====list library==== | ====list library==== | ||
Line 141: | Line 61: | ||
[cplist] Total: | [cplist] Total: | ||
[displayb] Total: | [displayb] Total: | ||
- | | + | |
[obtain] Total: | [obtain] Total: | ||
| | ||
Line 153: | Line 73: | ||
</ | </ | ||
- | ====group library==== | + | =====Submission===== |
- | Here is what you should get for all the functions completed in the group library: | + | {{page> |
- | + | ||
- | < | + | |
- | lab46: | + | |
- | ====================================================== | + | |
- | = Verifying Singly-Linked Group List Functionality | + | |
- | ====================================================== | + | |
- | | + | |
- | [ldisplay] Total: | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | ====================================================== | + | |
- | | + | |
- | ====================================================== | + | |
- | lab46: | + | |
- | </ | + | |
- | =====Submission Criteria===== | + | |
- | To be successful in this project, the following criteria must be met: | + | |
- | + | ||
- | * Project must be submit on time, by the posted deadline. | + | |
- | * Late submissions will lose 25% credit per day, with the submission window closing on the 4th day following the deadline. | + | |
- | * All code must compile cleanly (no warnings or errors) | + | |
- | * all requested functions must be implemented in the related library | + | |
- | * all requested functionality must conform to stated requirements (either on this project page or in comment banner in source code files themselves). | + | |
- | * Executed programs must display in a manner similar to provided output | + | |
- | * output formatted, where applicable, must match that of project requirements | + | |
- | * Processing must be correct based on input given and output requested | + | |
- | * Output, if applicable, must be correct based on values input | + | |
- | * Code must be nicely and consistently indented (you may use the **indent** tool) | + | |
- | * Code must be commented | + | |
- | * Any "to be implemented" | + | |
- | * these "to be implemented" | + | |
- | * Sufficient comments explaining the point of provided logic **MUST** be present | + | |
- | * Any and all functions written must have, **at most**, 1 **return** statement | + | |
- | * points will be lost for solutions containing multiple return statements in a function. | + | |
- | * Track/ | + | |
- | * Submit a copy of your source code to me using the **submit** tool (**make submit** will do this) by the deadline. | + |