Add 'labs/' from commit '58cd0413b229aea4bad859401adb7f4cb8f4474d'
git-subtree-dir: labs git-subtree-mainline:4d409d3106git-subtree-split:58cd0413b2
This commit is contained in:
124
labs/01_datalab/tests.c
Normal file
124
labs/01_datalab/tests.c
Normal file
@@ -0,0 +1,124 @@
|
||||
/* Testing Code */
|
||||
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
|
||||
/* Routines used by floation point test code */
|
||||
|
||||
/* Convert from bit level representation to floating point number */
|
||||
float u2f(unsigned u) {
|
||||
union {
|
||||
unsigned u;
|
||||
float f;
|
||||
} a;
|
||||
a.u = u;
|
||||
return a.f;
|
||||
}
|
||||
|
||||
/* Convert from floating point number to bit-level representation */
|
||||
unsigned f2u(float f) {
|
||||
union {
|
||||
unsigned u;
|
||||
float f;
|
||||
} a;
|
||||
a.f = f;
|
||||
return a.u;
|
||||
}
|
||||
|
||||
/* Copyright (C) 1991-2020 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
/* This header is separate from features.h so that the compiler can
|
||||
include it implicitly at the start of every compilation. It must
|
||||
not itself include <features.h> or any other header that includes
|
||||
<features.h> because the implicit include comes before any feature
|
||||
test macros that may be defined in a source file before it first
|
||||
explicitly includes a system header. GCC knows the name of this
|
||||
header in order to preinclude it. */
|
||||
/* glibc's intent is to support the IEC 559 math functionality, real
|
||||
and complex. If the GCC (4.9 and later) predefined macros
|
||||
specifying compiler intent are available, use them to determine
|
||||
whether the overall intent is to support these features; otherwise,
|
||||
presume an older compiler has intent to support these features and
|
||||
define these macros by default. */
|
||||
/* wchar_t uses Unicode 10.0.0. Version 10.0 of the Unicode Standard is
|
||||
synchronized with ISO/IEC 10646:2017, fifth edition, plus
|
||||
the following additions from Amendment 1 to the fifth edition:
|
||||
- 56 emoji characters
|
||||
- 285 hentaigana
|
||||
- 3 additional Zanabazar Square characters */
|
||||
//1
|
||||
int test_bitAnd(int x, int y)
|
||||
{
|
||||
return x&y;
|
||||
}
|
||||
int test_bitXor(int x, int y)
|
||||
{
|
||||
return x^y;
|
||||
}
|
||||
int test_isTmin(int x) {
|
||||
return x == 0x80000000;
|
||||
}
|
||||
//2
|
||||
int test_isEqual(int x, int y)
|
||||
{
|
||||
return x == y;
|
||||
}
|
||||
int test_negate(int x) {
|
||||
return -x;
|
||||
}
|
||||
int test_getByte(int x, int n)
|
||||
{
|
||||
unsigned char byte;
|
||||
switch(n) {
|
||||
case 0:
|
||||
byte = x;
|
||||
break;
|
||||
case 1:
|
||||
byte = x >> 8;
|
||||
break;
|
||||
case 2:
|
||||
byte = x >> 16;
|
||||
break;
|
||||
default:
|
||||
byte = x >> 24;
|
||||
break;
|
||||
}
|
||||
return (int) (unsigned) byte;
|
||||
}
|
||||
//3
|
||||
int test_isLess(int x, int y)
|
||||
{
|
||||
return x < y;
|
||||
}
|
||||
int test_conditional(int x, int y, int z)
|
||||
{
|
||||
return x?y:z;
|
||||
}
|
||||
//4
|
||||
unsigned test_floatScale2(unsigned uf) {
|
||||
float f = u2f(uf);
|
||||
float tf = 2*f;
|
||||
if (isnan(f))
|
||||
return uf;
|
||||
else
|
||||
return f2u(tf);
|
||||
}
|
||||
int test_floatFloat2Int(unsigned uf) {
|
||||
float f = u2f(uf);
|
||||
int x = (int) f;
|
||||
return x;
|
||||
}
|
||||
Reference in New Issue
Block a user