141 lines
4.5 KiB
Text
141 lines
4.5 KiB
Text
|
***********************
|
||
|
The CS:APP Data Lab
|
||
|
Directions to Students
|
||
|
***********************
|
||
|
|
||
|
Your goal is to modify your copy of bits.c so that it passes all the
|
||
|
tests in btest without violating any of the coding guidelines.
|
||
|
|
||
|
|
||
|
*********
|
||
|
0. Files:
|
||
|
*********
|
||
|
|
||
|
Makefile - Makes btest, fshow, and ishow
|
||
|
README - This file
|
||
|
bits.c - The file you will be modifying and handing in
|
||
|
bits.h - Header file
|
||
|
btest.c - The main btest program
|
||
|
btest.h - Used to build btest
|
||
|
decl.c - Used to build btest
|
||
|
tests.c - Used to build btest
|
||
|
tests-header.c- Used to build btest
|
||
|
dlc* - Rule checking compiler binary (data lab compiler)
|
||
|
driver.pl* - Driver program that uses btest and dlc to autograde bits.c
|
||
|
Driverhdrs.pm - Header file for optional "Beat the Prof" contest
|
||
|
fshow.c - Utility for examining floating-point representations
|
||
|
ishow.c - Utility for examining integer representations
|
||
|
|
||
|
***********************************************************
|
||
|
1. Modifying bits.c and checking it for compliance with dlc
|
||
|
***********************************************************
|
||
|
|
||
|
IMPORTANT: Carefully read the instructions in the bits.c file before
|
||
|
you start. These give the coding rules that you will need to follow if
|
||
|
you want full credit.
|
||
|
|
||
|
Use the dlc compiler (./dlc) to automatically check your version of
|
||
|
bits.c for compliance with the coding guidelines:
|
||
|
|
||
|
unix> ./dlc bits.c
|
||
|
|
||
|
dlc returns silently if there are no problems with your code.
|
||
|
Otherwise it prints messages that flag any problems. Running dlc with
|
||
|
the -e switch:
|
||
|
|
||
|
unix> ./dlc -e bits.c
|
||
|
|
||
|
causes dlc to print counts of the number of operators used by each function.
|
||
|
|
||
|
Once you have a legal solution, you can test it for correctness using
|
||
|
the ./btest program.
|
||
|
|
||
|
*********************
|
||
|
2. Testing with btest
|
||
|
*********************
|
||
|
|
||
|
The Makefile in this directory compiles your version of bits.c with
|
||
|
additional code to create a program (or test harness) named btest.
|
||
|
|
||
|
To compile and run the btest program, type:
|
||
|
|
||
|
unix> make btest
|
||
|
unix> ./btest [optional cmd line args]
|
||
|
|
||
|
You will need to recompile btest each time you change your bits.c
|
||
|
program. When moving from one platform to another, you will want to
|
||
|
get rid of the old version of btest and generate a new one. Use the
|
||
|
commands:
|
||
|
|
||
|
unix> make clean
|
||
|
unix> make btest
|
||
|
|
||
|
Btest tests your code for correctness by running millions of test
|
||
|
cases on each function. It tests wide swaths around well known corner
|
||
|
cases such as Tmin and zero for integer puzzles, and zero, inf, and
|
||
|
the boundary between denormalized and normalized numbers for floating
|
||
|
point puzzles. When btest detects an error in one of your functions,
|
||
|
it prints out the test that failed, the incorrect result, and the
|
||
|
expected result, and then terminates the testing for that function.
|
||
|
|
||
|
Here are the command line options for btest:
|
||
|
|
||
|
unix> ./btest -h
|
||
|
Usage: ./btest [-hg] [-r <n>] [-f <name> [-1|-2|-3 <val>]*] [-T <time limit>]
|
||
|
-1 <val> Specify first function argument
|
||
|
-2 <val> Specify second function argument
|
||
|
-3 <val> Specify third function argument
|
||
|
-f <name> Test only the named function
|
||
|
-g Format output for autograding with no error messages
|
||
|
-h Print this message
|
||
|
-r <n> Give uniform weight of n for all problems
|
||
|
-T <lim> Set timeout limit to lim
|
||
|
|
||
|
Examples:
|
||
|
|
||
|
Test all functions for correctness and print out error messages:
|
||
|
unix> ./btest
|
||
|
|
||
|
Test all functions in a compact form with no error messages:
|
||
|
unix> ./btest -g
|
||
|
|
||
|
Test function foo for correctness:
|
||
|
unix> ./btest -f foo
|
||
|
|
||
|
Test function foo for correctness with specific arguments:
|
||
|
unix> ./btest -f foo -1 27 -2 0xf
|
||
|
|
||
|
Btest does not check your code for compliance with the coding
|
||
|
guidelines. Use dlc to do that.
|
||
|
|
||
|
*******************
|
||
|
3. Helper Programs
|
||
|
*******************
|
||
|
|
||
|
We have included the ishow and fshow programs to help you decipher
|
||
|
integer and floating point representations respectively. Each takes a
|
||
|
single decimal or hex number as an argument. To build them type:
|
||
|
|
||
|
unix> make
|
||
|
|
||
|
Example usages:
|
||
|
|
||
|
unix> ./ishow 0x27
|
||
|
Hex = 0x00000027, Signed = 39, Unsigned = 39
|
||
|
|
||
|
unix> ./ishow 27
|
||
|
Hex = 0x0000001b, Signed = 27, Unsigned = 27
|
||
|
|
||
|
unix> ./fshow 0x15213243
|
||
|
Floating point value 3.255334057e-26
|
||
|
Bit Representation 0x15213243, sign = 0, exponent = 0x2a, fraction = 0x213243
|
||
|
Normalized. +1.2593463659 X 2^(-85)
|
||
|
|
||
|
linux> ./fshow 15213243
|
||
|
Floating point value 2.131829405e-38
|
||
|
Bit Representation 0x00e822bb, sign = 0, exponent = 0x01, fraction = 0x6822bb
|
||
|
Normalized. +1.8135598898 X 2^(-126)
|
||
|
|
||
|
|
||
|
|