diff options
author | miod <> | 2007-10-22 21:07:10 +0000 |
---|---|---|
committer | miod <> | 2007-10-22 21:07:10 +0000 |
commit | 744bfb5fee0dbac6a1a2189140e8d871d8542065 (patch) | |
tree | aa43d847103ed298d902113b094a87651b6c24f9 /src | |
parent | f3fcdb0a92dbfed3956fed57bb7bc2715f06944c (diff) | |
download | openbsd-744bfb5fee0dbac6a1a2189140e8d871d8542065.tar.gz openbsd-744bfb5fee0dbac6a1a2189140e8d871d8542065.tar.bz2 openbsd-744bfb5fee0dbac6a1a2189140e8d871d8542065.zip |
Only test one condition per invocation flavour, instead of testing all
of them with exceptions disabled and then only one with exceptions enabled.
ok kettenis@
Diffstat (limited to 'src')
-rw-r--r-- | src/regress/lib/libc/ieeefp/except/except.c | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/src/regress/lib/libc/ieeefp/except/except.c b/src/regress/lib/libc/ieeefp/except/except.c index 1d11877777..0f25cadefc 100644 --- a/src/regress/lib/libc/ieeefp/except/except.c +++ b/src/regress/lib/libc/ieeefp/except/except.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: except.c,v 1.10 2006/05/15 14:00:22 kettenis Exp $ */ | 1 | /* $OpenBSD: except.c,v 1.11 2007/10/22 21:07:10 miod Exp $ */ |
2 | 2 | ||
3 | #include <sys/types.h> | 3 | #include <sys/types.h> |
4 | #include <unistd.h> | 4 | #include <unistd.h> |
@@ -55,42 +55,44 @@ main(int argc, char *argv[]) | |||
55 | sigaction(SIGFPE, &sa, NULL); | 55 | sigaction(SIGFPE, &sa, NULL); |
56 | signal_status = 1; | 56 | signal_status = 1; |
57 | 57 | ||
58 | /* trip divide by zero */ | ||
59 | x = one / zero; | ||
60 | assert(fpgetsticky() & FP_X_DZ); | ||
61 | fpsetsticky(0); | ||
62 | |||
63 | /* trip invalid operation */ | ||
64 | x = zero / zero; | ||
65 | assert(fpgetsticky() & FP_X_INV); | ||
66 | fpsetsticky(0); | ||
67 | |||
68 | /* trip overflow */ | ||
69 | x = huge * huge; | ||
70 | assert(fpgetsticky() & FP_X_OFL); | ||
71 | fpsetsticky(0); | ||
72 | |||
73 | /* trip underflow */ | ||
74 | x = tiny * tiny; | ||
75 | assert(fpgetsticky() & FP_X_UFL); | ||
76 | fpsetsticky(0); | ||
77 | |||
78 | signal_status = 0; | ||
79 | |||
80 | if (strcmp(argv[1], "fltdiv") == 0) { | 58 | if (strcmp(argv[1], "fltdiv") == 0) { |
81 | /* unmask and then trip divide by zero */ | 59 | /* trip divide by zero */ |
60 | x = one / zero; | ||
61 | assert(fpgetsticky() & FP_X_DZ); | ||
62 | fpsetsticky(0); | ||
63 | |||
64 | /* and now unmask to get a signal */ | ||
65 | signal_status = 0; | ||
82 | fpsetmask(FP_X_DZ); | 66 | fpsetmask(FP_X_DZ); |
83 | x = one / zero; | 67 | x = one / zero; |
84 | } else if (strcmp(argv[1], "fltinv") == 0) { | 68 | } else if (strcmp(argv[1], "fltinv") == 0) { |
85 | /* unmask and then trip invalid operation */ | 69 | /* trip invalid operation */ |
70 | x = zero / zero; | ||
71 | assert(fpgetsticky() & FP_X_INV); | ||
72 | fpsetsticky(0); | ||
73 | |||
74 | /* and now unmask to get a signal */ | ||
75 | signal_status = 0; | ||
86 | fpsetmask(FP_X_INV); | 76 | fpsetmask(FP_X_INV); |
87 | x = zero / zero; | 77 | x = zero / zero; |
88 | } else if (strcmp(argv[1], "fltovf") == 0) { | 78 | } else if (strcmp(argv[1], "fltovf") == 0) { |
89 | /* unmask and then trip overflow */ | 79 | /* trip overflow */ |
80 | x = huge * huge; | ||
81 | assert(fpgetsticky() & FP_X_OFL); | ||
82 | fpsetsticky(0); | ||
83 | |||
84 | /* and now unmask to get a signal */ | ||
85 | signal_status = 0; | ||
90 | fpsetmask(FP_X_OFL); | 86 | fpsetmask(FP_X_OFL); |
91 | x = huge * huge; | 87 | x = huge * huge; |
92 | } else if (strcmp(argv[1], "fltund") == 0) { | 88 | } else if (strcmp(argv[1], "fltund") == 0) { |
93 | /* unmask and then trip underflow */ | 89 | /* trip underflow */ |
90 | x = tiny * tiny; | ||
91 | assert(fpgetsticky() & FP_X_UFL); | ||
92 | fpsetsticky(0); | ||
93 | |||
94 | /* and now unmask to get a signal */ | ||
95 | signal_status = 0; | ||
94 | fpsetmask(FP_X_UFL); | 96 | fpsetmask(FP_X_UFL); |
95 | x = tiny * tiny; | 97 | x = tiny * tiny; |
96 | } else { | 98 | } else { |