mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-31 17:10:47 +08:00
[svn-r973] Added tests for scalar data space, string data type, loop detection and
compound data type.
This commit is contained in:
parent
09aaf83332
commit
c91120b4b8
@ -1,7 +1,6 @@
|
||||
/*
|
||||
* Generate the binary hdf5 files for the h5dump tests.
|
||||
*/
|
||||
#include <limits.h>
|
||||
#include "hdf5.h"
|
||||
|
||||
#define FILE1 "tgroup.h5"
|
||||
@ -11,8 +10,7 @@
|
||||
#define FILE5 "thlink.h5"
|
||||
#define FILE6 "tcompound.h5"
|
||||
#define FILE7 "tall.h5"
|
||||
#define FILE8 "tdset2.h5"
|
||||
#define FILE9 "tcompound2.h5"
|
||||
#define FILE10 "tloop.h5"
|
||||
|
||||
static void test_group(void) {
|
||||
hid_t fid, group;
|
||||
@ -62,7 +60,7 @@ static void test_dataset(void) {
|
||||
hid_t fid, dataset, space;
|
||||
hsize_t dims[2];
|
||||
int dset1[10][20];
|
||||
double dset2[30][10];
|
||||
double dset2[30][20];
|
||||
int i, j;
|
||||
|
||||
fid = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
@ -79,56 +77,12 @@ int i, j;
|
||||
H5Dclose(dataset);
|
||||
|
||||
/* dset2 */
|
||||
dims[0] = 30; dims[1] = 10;
|
||||
dims[0] = 30; dims[1] = 20;
|
||||
space = H5Screate_simple(2, dims, NULL);
|
||||
dataset = H5Dcreate(fid, "/dset2", H5T_IEEE_F64BE, space, H5P_DEFAULT);
|
||||
for (i = 0; i < 30; i++)
|
||||
for (j = 0; j < 10; j++)
|
||||
dset2[i][j] = j;
|
||||
H5Dwrite(dataset, H5T_IEEE_F64BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
|
||||
|
||||
H5Fclose(fid);
|
||||
}
|
||||
|
||||
static void test_dataset2(void) {
|
||||
hid_t fid, dataset, space, create_plist;
|
||||
hsize_t dims[2];
|
||||
hsize_t maxdims[2];
|
||||
int dset1[10][20];
|
||||
double dset2[30][10];
|
||||
int i, j;
|
||||
|
||||
|
||||
fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
create_plist = H5Pcreate(H5P_DATASET_CREATE);
|
||||
|
||||
dims[0] = 5; dims[1] = 5;
|
||||
H5Pset_chunk(create_plist, 2, dims);
|
||||
|
||||
/* dset1 */
|
||||
dims[0] = 10; dims[1] = 20;
|
||||
maxdims[0] = H5S_UNLIMITED; maxdims[1] = 20;
|
||||
space = H5Screate_simple(2, dims, maxdims);
|
||||
dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, create_plist);
|
||||
for (i = 0; i < 10; i++)
|
||||
for (j = 0; j < 20; j++)
|
||||
dset1[i][j] = j;
|
||||
H5Dwrite(dataset, H5T_STD_I32BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
|
||||
/* dset2 */
|
||||
dims[0] = 30; dims[1] = 10;
|
||||
maxdims[0] = 30; maxdims[1] = H5S_UNLIMITED;
|
||||
space = H5Screate_simple(2, dims, maxdims);
|
||||
dataset = H5Dcreate(fid, "/dset2", H5T_IEEE_F64BE, space, create_plist);
|
||||
for (i = 0; i < 30; i++)
|
||||
for (j = 0; j < 10; j++)
|
||||
dset2[i][j] = j;
|
||||
dset2[i][j] = 0.0001*j;
|
||||
H5Dwrite(dataset, H5T_IEEE_F64BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
@ -137,24 +91,39 @@ int i, j;
|
||||
H5Fclose(fid);
|
||||
}
|
||||
|
||||
|
||||
static void test_attribute(void) {
|
||||
hid_t fid, root, space, attr;
|
||||
hid_t fid, root, space, attr, type;
|
||||
hsize_t dims[2];
|
||||
char buf[60];
|
||||
int i, data[20];
|
||||
double d[10];
|
||||
char string[]= "string attribute";
|
||||
char str[10][8];
|
||||
int point = 100;
|
||||
int tmp[2];
|
||||
|
||||
fid = H5Fcreate(FILE3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
root = H5Gopen (fid, "/");
|
||||
|
||||
/* attribute 0 */
|
||||
/*
|
||||
dims[0] = 2;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate (root, "attr0", H5T_STD_I32LE, space, H5P_DEFAULT);
|
||||
tmp[0] = 64; tmp[1] = 65;
|
||||
H5Awrite(attr, H5T_STD_I32LE, tmp);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
*/
|
||||
|
||||
/* attribute 1 */
|
||||
dims[0] = 24;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate (root, "attr1", H5T_NATIVE_CHAR, space, H5P_DEFAULT);
|
||||
attr = H5Acreate (root, "attr1", H5T_NATIVE_SCHAR, space, H5P_DEFAULT);
|
||||
sprintf(buf, "attribute of root group");
|
||||
H5Awrite(attr, H5T_NATIVE_CHAR, buf);
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
@ -177,6 +146,38 @@ double d[10];
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
/* attribute 4 */
|
||||
space = H5Screate(H5S_SCALAR);
|
||||
attr = H5Acreate (root, "attr4", H5T_STD_I32BE, space, H5P_DEFAULT);
|
||||
H5Awrite(attr, H5T_STD_I32BE, &point);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
/* attribute 5 */
|
||||
space = H5Screate(H5S_SCALAR);
|
||||
type = H5Tcopy(H5T_C_S1);
|
||||
H5Tset_size(type, 17);
|
||||
attr = H5Acreate (root, "attr5", type, space, H5P_DEFAULT);
|
||||
H5Awrite(attr, type, string);
|
||||
H5Tclose(type);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
/* attribute 6 */
|
||||
/*
|
||||
dims[0] = 10;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
type = H5Tcopy(H5T_C_S1);
|
||||
H5Tset_size(type, 8);
|
||||
attr = H5Acreate (root, "attr6", type, space, H5P_DEFAULT);
|
||||
for (i = 0; i < 10; i++)
|
||||
sprintf(str[i], "string%d", i);
|
||||
H5Awrite(attr, type, str);
|
||||
H5Tclose(type);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
*/
|
||||
|
||||
H5Gclose(root);
|
||||
|
||||
H5Fclose(fid);
|
||||
@ -201,13 +202,18 @@ herr_t status;
|
||||
}
|
||||
|
||||
/*
|
||||
/
|
||||
/ | \
|
||||
g1 g2 dset
|
||||
/
|
||||
|
||||
/ | \ the dataset is hardlinked to three names
|
||||
/dset1, /g1/dset2, and /g1/g1.1/dset3
|
||||
dset1 g1 g2
|
||||
/g2 and /g1/g1.1 are hardlinked to the same object.
|
||||
/ \
|
||||
dset2 g1.1
|
||||
|
|
||||
dset3
|
||||
*/
|
||||
|
||||
/ \ |
|
||||
link1 link2 link3
|
||||
(g2) (dset) (dset) */
|
||||
|
||||
static void test_hardlink(void) {
|
||||
hid_t fid, group, dataset, space;
|
||||
@ -218,22 +224,22 @@ int i, dset[5];
|
||||
|
||||
dim = 5;
|
||||
space = H5Screate_simple(1, &dim, NULL);
|
||||
dataset = H5Dcreate(fid, "/dset", H5T_STD_I32BE, space, H5P_DEFAULT);
|
||||
dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, H5P_DEFAULT);
|
||||
for (i = 0; i < 5; i++) dset[i] = i;
|
||||
H5Dwrite(dataset, H5T_STD_I32BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
|
||||
group = H5Gcreate (fid, "/g1", 0);
|
||||
H5Glink (group, H5G_LINK_HARD, "/dset", "link2");
|
||||
H5Glink (group, H5G_LINK_HARD, "/dset1", "dset2");
|
||||
H5Gclose(group);
|
||||
|
||||
group = H5Gcreate (fid, "/g2", 0);
|
||||
H5Glink (group, H5G_LINK_HARD, "/dset", "link3");
|
||||
H5Glink (group, H5G_LINK_HARD, "/dset1", "dset3");
|
||||
H5Gclose(group);
|
||||
|
||||
group = H5Gopen(fid, "/g1");
|
||||
H5Glink (group, H5G_LINK_HARD, "/g2", "link1");
|
||||
H5Glink (group, H5G_LINK_HARD, "/g2", "g1.1");
|
||||
H5Gclose(group);
|
||||
|
||||
H5Fclose(fid);
|
||||
@ -248,7 +254,7 @@ int i, dset[5];
|
||||
|
||||
*/
|
||||
static void test_compound_dt(void) { /* test compound data type */
|
||||
hid_t fid, group, dataset, space, type;
|
||||
hid_t fid, group, dataset, space, space3, type;
|
||||
typedef struct {
|
||||
int a;
|
||||
float b;
|
||||
@ -266,6 +272,7 @@ typedef struct {
|
||||
int a[4];
|
||||
float b[5][6];
|
||||
} dset3_t;
|
||||
dset3_t dset3[3][6];
|
||||
|
||||
typedef struct {
|
||||
int a;
|
||||
@ -279,12 +286,13 @@ typedef struct {
|
||||
} dset5_t;
|
||||
dset5_t dset5[5];
|
||||
|
||||
int i, ndims;
|
||||
const int perm[2];
|
||||
int i, j, k, l, ndims;
|
||||
size_t dim[2];
|
||||
|
||||
hsize_t sdim = 5;
|
||||
hsize_t dset3_dim[2];
|
||||
|
||||
|
||||
for (i = 0; i < (int)sdim; i++) {
|
||||
dset1[i].a = i;
|
||||
dset1[i].b = i*i;
|
||||
@ -297,9 +305,10 @@ hsize_t sdim = 5;
|
||||
dset4[i].b = i*1.0;
|
||||
|
||||
dset5[i].a = i;
|
||||
dset5[i].b = i*1.0;
|
||||
dset5[i].b = i*0.1;
|
||||
}
|
||||
|
||||
|
||||
fid = H5Fcreate(FILE6, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
space = H5Screate_simple(1, &sdim, NULL);
|
||||
@ -334,11 +343,27 @@ hsize_t sdim = 5;
|
||||
/* shared data type 2 */
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset3_t));
|
||||
ndims = 1; dim[0] = 4;
|
||||
H5Tinsert_array(type, "int_array", HOFFSET(dset3_t, a), ndims, dim, perm, H5T_STD_I32BE);
|
||||
H5Tinsert_array(type, "int_array", HOFFSET(dset3_t, a), ndims, dim, NULL, H5T_STD_I32BE);
|
||||
ndims = 2; dim[0] = 5; dim[1] = 6;
|
||||
H5Tinsert_array(type, "float_array", HOFFSET(dset3_t, b), ndims, dim, perm, H5T_STD_I32BE);
|
||||
H5Tinsert_array(type, "float_array", HOFFSET(dset3_t, b), ndims, dim, NULL, H5T_IEEE_F32BE);
|
||||
H5Tcommit(fid, "type2", type);
|
||||
|
||||
dset3_dim[0] = 3; dset3_dim[1] = 6;
|
||||
space3 = H5Screate_simple(2, dset3_dim, NULL);
|
||||
dataset = H5Dcreate(group, "dset3", type, space3, H5P_DEFAULT);
|
||||
for (i = 0; i < dset3_dim[0]; i++) {
|
||||
for (j = 0; j < dset3_dim[1]; j++) {
|
||||
for (k = 0; k < 4; k++)
|
||||
dset3[i][j].a[k] = k;
|
||||
for (k = 0; k < 5; k++)
|
||||
for (l = 0; l < 6; l++)
|
||||
dset3[i][j].b[k][l] = 0.1* (k+1);
|
||||
}
|
||||
}
|
||||
H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset3);
|
||||
H5Sclose(space3);
|
||||
H5Tclose(type);
|
||||
H5Dclose(dataset);
|
||||
|
||||
/* shared data type 3 */
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset4_t));
|
||||
@ -375,156 +400,6 @@ hsize_t sdim = 5;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
/
|
||||
/ | \ \
|
||||
dset1 group1 type1 type2
|
||||
|
|
||||
dset2
|
||||
|
||||
*/
|
||||
static void test_compound_dt2(void) { /* test compound data type */
|
||||
hid_t fid, group, dataset, space, type, create_plist;
|
||||
typedef struct {
|
||||
int a;
|
||||
float b;
|
||||
double c;
|
||||
} dset1_t;
|
||||
dset1_t dset1[10];
|
||||
|
||||
typedef struct {
|
||||
int a;
|
||||
float b;
|
||||
} dset2_t;
|
||||
dset2_t dset2[10];
|
||||
|
||||
typedef struct {
|
||||
int a[4];
|
||||
float b[5][6];
|
||||
} dset3_t;
|
||||
|
||||
typedef struct {
|
||||
int a;
|
||||
float b;
|
||||
} dset4_t;
|
||||
dset4_t dset4[10];
|
||||
|
||||
typedef struct {
|
||||
int a;
|
||||
float b;
|
||||
} dset5_t;
|
||||
dset5_t dset5[10];
|
||||
|
||||
int i, ndims;
|
||||
const int perm[2];
|
||||
size_t dim[2];
|
||||
|
||||
hsize_t sdim, maxdim;
|
||||
|
||||
sdim = 10;
|
||||
for (i = 0; i < (int)sdim; i++) {
|
||||
dset1[i].a = i;
|
||||
dset1[i].b = i*i;
|
||||
dset1[i].c = 1./(i+1);
|
||||
|
||||
dset2[i].a = i;
|
||||
dset2[i].b = i+ i*0.1;
|
||||
|
||||
dset4[i].a = i;
|
||||
dset4[i].b = i*1.0;
|
||||
|
||||
dset5[i].a = i;
|
||||
dset5[i].b = i*1.0;
|
||||
}
|
||||
|
||||
fid = H5Fcreate(FILE9, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
create_plist = H5Pcreate(H5P_DATASET_CREATE);
|
||||
|
||||
sdim = 2;
|
||||
H5Pset_chunk(create_plist, 1, &sdim);
|
||||
|
||||
sdim = 6;
|
||||
maxdim = H5S_UNLIMITED;
|
||||
|
||||
space = H5Screate_simple(1, &sdim, &maxdim);
|
||||
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset1[0]));
|
||||
|
||||
H5Tinsert(type, "a_name", HOFFSET(dset1_t, a), H5T_STD_I32BE);
|
||||
H5Tinsert(type, "b_name", HOFFSET(dset1_t, b), H5T_IEEE_F32BE);
|
||||
H5Tinsert(type, "c_name", HOFFSET(dset1_t, c), H5T_IEEE_F64BE);
|
||||
|
||||
dataset = H5Dcreate(fid, "/dset1", type, space, create_plist);
|
||||
H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
|
||||
|
||||
H5Tclose(type);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
|
||||
sdim = 6;
|
||||
maxdim = 10;
|
||||
|
||||
space = H5Screate_simple(1, &sdim, &maxdim);
|
||||
|
||||
/* shared data type 1 */
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset2_t));
|
||||
H5Tinsert(type, "int_name", HOFFSET(dset2_t, a), H5T_STD_I32BE);
|
||||
H5Tinsert(type, "float_name", HOFFSET(dset2_t, b), H5T_IEEE_F32BE);
|
||||
H5Tcommit(fid, "type1", type);
|
||||
|
||||
group = H5Gcreate (fid, "/group1", 0);
|
||||
|
||||
dataset = H5Dcreate(group, "dset2", type, space, create_plist);
|
||||
H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
|
||||
|
||||
H5Tclose(type);
|
||||
H5Dclose(dataset);
|
||||
|
||||
|
||||
/* shared data type 2 */
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset3_t));
|
||||
ndims = 1; dim[0] = 4;
|
||||
H5Tinsert_array(type, "int_array", HOFFSET(dset3_t, a), ndims, dim, perm, H5T_STD_I32BE);
|
||||
ndims = 2; dim[0] = 5; dim[1] = 6;
|
||||
H5Tinsert_array(type, "float_array", HOFFSET(dset3_t, b), ndims, dim, perm, H5T_STD_I32BE);
|
||||
H5Tcommit(fid, "type2", type);
|
||||
H5Tclose(type);
|
||||
|
||||
/* shared data type 3 */
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset4_t));
|
||||
H5Tinsert(type, "int", HOFFSET(dset4_t, a), H5T_STD_I32BE);
|
||||
H5Tinsert(type, "float", HOFFSET(dset4_t, b), H5T_IEEE_F32BE);
|
||||
H5Tcommit(group, "type3", type);
|
||||
|
||||
dataset = H5Dcreate(group, "dset4", type, space, create_plist);
|
||||
H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset4);
|
||||
|
||||
H5Tclose(type);
|
||||
H5Dclose(dataset);
|
||||
H5Gclose(group);
|
||||
|
||||
|
||||
/* unamed data type */
|
||||
group = H5Gcreate (fid, "/group2", 0);
|
||||
|
||||
type = H5Tcreate (H5T_COMPOUND, sizeof(dset5_t));
|
||||
H5Tinsert(type, "int", HOFFSET(dset5_t, a), H5T_STD_I32BE);
|
||||
H5Tinsert(type, "float", HOFFSET(dset5_t, b), H5T_IEEE_F32BE);
|
||||
H5Tcommit(group, "type4", type);
|
||||
dataset = H5Dcreate(group, "dset5", type, space, create_plist);
|
||||
H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset5);
|
||||
|
||||
H5Gunlink(group,"type4");
|
||||
|
||||
H5Tclose(type);
|
||||
H5Dclose(dataset);
|
||||
H5Sclose(space);
|
||||
H5Gclose(group);
|
||||
|
||||
H5Fclose(fid);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -568,9 +443,9 @@ float dset2_1[10], dset2_2[3][5];
|
||||
|
||||
dims[0] = 10;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate (group, "attr1", H5T_NATIVE_CHAR, space, H5P_DEFAULT);
|
||||
attr = H5Acreate (group, "attr1", H5T_NATIVE_SCHAR, space, H5P_DEFAULT);
|
||||
sprintf(buf, "abcdefghi");
|
||||
H5Awrite(attr, H5T_NATIVE_CHAR, buf);
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
@ -599,17 +474,17 @@ float dset2_1[10], dset2_2[3][5];
|
||||
/* attributes of dset1.1.1 */
|
||||
dims[0] = 27;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate (dataset, "attr1", H5T_NATIVE_CHAR, space, H5P_DEFAULT);
|
||||
attr = H5Acreate (dataset, "attr1", H5T_NATIVE_SCHAR, space, H5P_DEFAULT);
|
||||
sprintf(buf, "1st attribute of dset1.1.1");
|
||||
H5Awrite(attr, H5T_NATIVE_CHAR, buf);
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
dims[0] = 27;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate (dataset, "attr2", H5T_NATIVE_CHAR, space, H5P_DEFAULT);
|
||||
attr = H5Acreate (dataset, "attr2", H5T_NATIVE_SCHAR, space, H5P_DEFAULT);
|
||||
sprintf(buf, "2nd attribute of dset1.1.1");
|
||||
H5Awrite(attr, H5T_NATIVE_CHAR, buf);
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
|
||||
@ -661,6 +536,22 @@ float dset2_1[10], dset2_2[3][5];
|
||||
|
||||
}
|
||||
|
||||
static void test_loop(void) {
|
||||
hid_t fid, group;
|
||||
|
||||
fid = H5Fcreate(FILE10, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
|
||||
group = H5Gcreate (fid, "/g1", 0);
|
||||
H5Gclose(group);
|
||||
group = H5Gcreate (fid, "/g2", 0);
|
||||
H5Gclose(group);
|
||||
|
||||
H5Glink(fid, H5G_LINK_HARD, "/g2", "/g1/g1.1");
|
||||
H5Glink(fid, H5G_LINK_HARD, "/g1", "/g2/g2.1");
|
||||
|
||||
H5Fclose(fid);
|
||||
}
|
||||
|
||||
|
||||
int main(void){
|
||||
|
||||
@ -668,10 +559,9 @@ test_group();
|
||||
test_attribute();
|
||||
test_softlink();
|
||||
test_dataset();
|
||||
test_dataset2();
|
||||
test_hardlink();
|
||||
test_compound_dt();
|
||||
test_compound_dt2();
|
||||
test_loop();
|
||||
test_all();
|
||||
return 0;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user