Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
e95938c2
Commit
e95938c2
authored
May 21, 2014
by
Piotr Caban
Committed by
Alexandre Julliard
May 21, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msvcrt: Add qsort_s tests.
parent
b703afda
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
124 additions
and
0 deletions
+124
-0
misc.c
dlls/msvcrt/tests/misc.c
+124
-0
No files found.
dlls/msvcrt/tests/misc.c
View file @
e95938c2
...
...
@@ -32,6 +32,8 @@ static int (__cdecl *p_set_doserrno)(int);
static
int
(
__cdecl
*
p_set_errno
)(
int
);
static
void
(
__cdecl
*
p__invalid_parameter
)(
const
wchar_t
*
,
const
wchar_t
*
,
const
wchar_t
*
,
unsigned
int
,
uintptr_t
);
static
void
(
__cdecl
*
p_qsort_s
)(
void
*
,
MSVCRT_size_t
,
MSVCRT_size_t
,
int
(
__cdecl
*
)(
void
*
,
const
void
*
,
const
void
*
),
void
*
);
static
void
init
(
void
)
{
...
...
@@ -45,6 +47,7 @@ static void init(void)
p_set_doserrno
=
(
void
*
)
GetProcAddress
(
hmod
,
"_set_doserrno"
);
p_set_errno
=
(
void
*
)
GetProcAddress
(
hmod
,
"_set_errno"
);
p__invalid_parameter
=
(
void
*
)
GetProcAddress
(
hmod
,
"_invalid_parameter"
);
p_qsort_s
=
(
void
*
)
GetProcAddress
(
hmod
,
"qsort_s"
);
}
static
void
test_rand_s
(
void
)
...
...
@@ -354,6 +357,126 @@ static void test__invalid_parameter(void)
p__invalid_parameter
(
NULL
,
NULL
,
NULL
,
0
,
0
);
}
struct
qsort_test
{
int
pos
;
int
*
base
;
struct
{
int
l
;
int
r
;
}
cmp
[
64
];
};
int
__cdecl
qsort_comp
(
void
*
ctx
,
const
void
*
l
,
const
void
*
r
)
{
struct
qsort_test
*
qt
=
ctx
;
if
(
qt
)
{
ok
(
qt
->
pos
<
64
,
"qt->pos = %d
\n
"
,
qt
->
pos
);
ok
(
qt
->
cmp
[
qt
->
pos
].
l
==
(
int
*
)
l
-
qt
->
base
,
"%d) l on %ld position
\n
"
,
qt
->
pos
,
(
long
)((
int
*
)
l
-
qt
->
base
));
ok
(
qt
->
cmp
[
qt
->
pos
].
r
==
(
int
*
)
r
-
qt
->
base
,
"%d) r on %ld position
\n
"
,
qt
->
pos
,
(
long
)((
int
*
)
r
-
qt
->
base
));
qt
->
pos
++
;
}
return
*
(
int
*
)
l
%
1000
-
*
(
int
*
)
r
%
1000
;
}
static
void
test_qsort_s
(
void
)
{
static
const
int
nonstable_test
[]
=
{
9000
,
8001
,
7002
,
6003
,
1003
,
5004
,
4005
,
3006
,
2007
};
int
tab
[
100
],
i
;
struct
qsort_test
small_sort
=
{
0
,
tab
,
{
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
5
,
4
},
{
6
,
5
},
{
7
,
6
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
5
,
4
},
{
6
,
5
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
5
,
4
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
1
,
0
},
{
2
,
1
},
{
1
,
0
}
}
},
small_sort2
=
{
0
,
tab
,
{
{
1
,
0
},
{
2
,
0
},
{
3
,
0
},
{
4
,
0
},
{
5
,
0
},
{
6
,
0
},
{
7
,
0
},
{
1
,
0
},
{
2
,
1
},
{
3
,
1
},
{
4
,
1
},
{
5
,
1
},
{
6
,
1
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
2
},
{
5
,
2
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
1
,
0
},
{
2
,
1
},
{
1
,
0
}
}
},
quick_sort
=
{
0
,
tab
,
{
{
0
,
4
},
{
0
,
8
},
{
4
,
8
},
{
1
,
4
},
{
2
,
4
},
{
3
,
4
},
{
5
,
4
},
{
6
,
4
},
{
7
,
4
},
{
7
,
4
},
{
6
,
4
},
{
6
,
4
},
{
8
,
7
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
5
,
4
},
{
6
,
4
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
3
},
{
5
,
3
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
4
,
2
},
{
1
,
0
},
{
2
,
1
},
{
3
,
2
},
{
1
,
0
},
{
2
,
1
},
{
1
,
0
}
}
};
if
(
!
p_qsort_s
)
{
win_skip
(
"qsort_s not available
\n
"
);
return
;
}
for
(
i
=
0
;
i
<
8
;
i
++
)
tab
[
i
]
=
i
;
p_qsort_s
(
tab
,
8
,
sizeof
(
int
),
qsort_comp
,
&
small_sort
);
ok
(
small_sort
.
pos
==
28
,
"small_sort.pos = %d
\n
"
,
small_sort
.
pos
);
for
(
i
=
0
;
i
<
8
;
i
++
)
ok
(
tab
[
i
]
==
i
,
"tab[%d] = %d
\n
"
,
i
,
tab
[
i
]);
for
(
i
=
0
;
i
<
8
;
i
++
)
tab
[
i
]
=
7
-
i
;
p_qsort_s
(
tab
,
8
,
sizeof
(
int
),
qsort_comp
,
&
small_sort2
);
ok
(
small_sort2
.
pos
==
28
,
"small_sort2.pos = %d
\n
"
,
small_sort2
.
pos
);
for
(
i
=
0
;
i
<
8
;
i
++
)
ok
(
tab
[
i
]
==
i
,
"tab[%d] = %d
\n
"
,
i
,
tab
[
i
]);
for
(
i
=
0
;
i
<
9
;
i
++
)
tab
[
i
]
=
i
;
tab
[
5
]
=
1
;
tab
[
6
]
=
2
;
p_qsort_s
(
tab
,
9
,
sizeof
(
int
),
qsort_comp
,
&
quick_sort
);
ok
(
quick_sort
.
pos
==
34
,
"quick_sort.pos = %d
\n
"
,
quick_sort
.
pos
);
/* show that qsort is not stable */
for
(
i
=
0
;
i
<
9
;
i
++
)
tab
[
i
]
=
8
-
i
+
1000
*
(
i
+
1
);
tab
[
0
]
=
1003
;
p_qsort_s
(
tab
,
9
,
sizeof
(
int
),
qsort_comp
,
NULL
);
for
(
i
=
0
;
i
<
9
;
i
++
)
ok
(
tab
[
i
]
==
nonstable_test
[
i
],
"tab[%d] = %d, expected %d
\n
"
,
i
,
tab
[
i
],
nonstable_test
[
i
]);
/* check if random data is sorted */
srand
(
0
);
for
(
i
=
0
;
i
<
100
;
i
++
)
tab
[
i
]
=
rand
()
%
1000
;
p_qsort_s
(
tab
,
100
,
sizeof
(
int
),
qsort_comp
,
NULL
);
for
(
i
=
1
;
i
<
100
;
i
++
)
ok
(
tab
[
i
-
1
]
<=
tab
[
i
],
"data sorted incorrectly on position %d: %d <= %d
\n
"
,
i
,
tab
[
i
-
1
],
tab
[
i
]);
/* test if random permutation is sorted correctly */
for
(
i
=
0
;
i
<
100
;
i
++
)
tab
[
i
]
=
i
;
for
(
i
=
0
;
i
<
100
;
i
++
)
{
int
b
=
rand
()
%
100
;
int
e
=
rand
()
%
100
;
if
(
b
==
e
)
continue
;
tab
[
b
]
^=
tab
[
e
];
tab
[
e
]
^=
tab
[
b
];
tab
[
b
]
^=
tab
[
e
];
}
p_qsort_s
(
tab
,
100
,
sizeof
(
int
),
qsort_comp
,
NULL
);
for
(
i
=
0
;
i
<
100
;
i
++
)
ok
(
tab
[
i
]
==
i
,
"data sorted incorrectly on position %d: %d
\n
"
,
i
,
tab
[
i
]);
}
START_TEST
(
misc
)
{
int
arg_c
;
...
...
@@ -380,4 +503,5 @@ START_TEST(misc)
test__set_errno
();
test__popen
(
arg_v
[
0
]);
test__invalid_parameter
();
test_qsort_s
();
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment