Copyright © 2019 Ichigo Ichigo. All Rights Reserved.
CS:APP Data Lab
指导书
0. 文件:
文件 | 说明 |
---|---|
Makefile | - 编译 btest, fshow, 与 ishow |
README | - 此说明文档 |
bits.c | - 你将修改与提交的文件 |
bits.h | - 头文件 |
btest.c | - btest 主程序 |
btest.h | - 用于搭建 btest |
decl.c | - 用于搭建 btest |
tests.c | - 用于搭建 btest |
tests-header.c | - 用于搭建 btest |
dlc* | - 规则检查程序,(data lab 编译器) |
driver.p* | - Driver program that uses btest and dlc to autograde bits.c |
Driverhdrs.pm | - 选项 " Beat the Prof " 的头文件 |
fshow.c | - 用于检测浮点数格式 |
ishow.c | - 用于检测整数格式 |
1. 修改 bits.c 文件,用 dlc 检查其是否符合规定
重要: 开始前请先仔细阅读 bits.c 当中的指导说明。你需要遵守这些说明给出的代码规则——如果你想得满分的话。
使用 dlc 编译器(./dlc)来检查你的 bits.c 是否遵从了代码规则:
unix> ./dlc bits.c
如果你的代码没有任何问题,dlc 将不会反馈任何信息。否则它将相关问题的标志信息。使用 -e 选项来运行 dlc:
unix> ./dlc -e bits.c
可以使其打印出每个函数所使用的操作符数目。
当你确保代码符合规定之后,你可以通过 ./btest 程序来检测其正确性。
2. 使用 btest 检测
目录中的 Makefile 会将你的 bits.c 连同一些附加代码一起编译以生成一个名为 btest 的程序(或者叫测试装置)。
键入以下命令来编译及运行 btest 程序:
unix> make btest
unix> ./btest [optional cmd line args]
每次你修改了 bits.c 文件,你都需要重新编译 btest。当在平台之间迁移文件时,你可能想要舍弃旧的 btest,重新编译。使用以下命令:
unix> make clean
unix> make btest
btest 会为每个函数运行数以百万记的测试样例来检测你代码的正确性。样例覆盖的宽度极广,包含了一些广为人知的边缘案例,比如 integer puzzle 中的 Tmin 和 0,floating point puzzle 中的 0,inf,以及规格化数与非规格化数的界线。当 btest 发现你某个函数中的错误时,它将打印出无法通过的样例,对应的错误结果和正确结果,然后结束该函数的测试。
以下是 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
- -1 <val> 指定第一个参数值
- -2 <val> 指定第二个参数值
- -3 <val> 指定第三个参数值
- -f <name> 只检测此名称的函数
- -g 以“不带错误信息”格式化自动评分输出
- -h 打印此帮助信息
- -r <n> 对所有问题给出统一权重 n
- -T <lim> 设置超时上限
例:
测试所有函数并输出错误信息:
unix> ./btest
以简介模式测试所有函数,不输出错误信息:
unix> ./btest -g
测试函数 foo 的正确性:
unix> ./btest -f foo
以指定参数测试函数 foo 的正确性:
unix> ./btest -f foo -1 27 -2 0xf
btest 并不检查你的代码是否符合规定,请使用 dlc 来做对应检测。
3. 帮助程序
我们为你打包了 ishow 和 fshow 程序来分别帮助你得到整型与浮点型的表示形式。它们各自接受一个十进制或十六进制数作为参数。使用以下命令搭建这两个程序:
unix> make
例:
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)
网友评论