Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
tianlh
LightGBM-DCU
Commits
c7134fa7
Unverified
Commit
c7134fa7
authored
Jun 18, 2021
by
kruda
Committed by
GitHub
Jun 18, 2021
Browse files
Fixed issue
https://github.com/microsoft/LightGBM/issues/4272
and added tests for partition (#4280)
parent
f126db64
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
1 deletion
+55
-1
include/LightGBM/utils/array_args.h
include/LightGBM/utils/array_args.h
+3
-1
tests/cpp_tests/test_array_args.cpp
tests/cpp_tests/test_array_args.cpp
+52
-0
No files found.
include/LightGBM/utils/array_args.h
View file @
c7134fa7
...
...
@@ -103,7 +103,9 @@ class ArrayArgs {
int
j
=
end
-
1
;
int
p
=
i
;
int
q
=
j
;
if
(
start
>=
end
)
{
if
(
start
>=
end
-
1
)
{
*
l
=
start
-
1
;
*
r
=
end
;
return
;
}
std
::
vector
<
VAL_T
>&
ref
=
*
arr
;
...
...
tests/cpp_tests/test_array_args.cpp
0 → 100644
View file @
c7134fa7
/*!
* Copyright (c) 2021 Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE file in the project root for license information.
*/
#include <gtest/gtest.h>
#include <LightGBM/meta.h>
#include <LightGBM/utils/array_args.h>
#include <random>
using
LightGBM
::
data_size_t
;
using
LightGBM
::
score_t
;
using
LightGBM
::
ArrayArgs
;
TEST
(
Partition
,
JustWorks
)
{
std
::
vector
<
score_t
>
gradients
({
0.5
f
,
5.0
f
,
1.0
f
,
2.0
f
,
2.0
f
});
data_size_t
middle_begin
,
middle_end
;
ArrayArgs
<
score_t
>::
Partition
(
&
gradients
,
0
,
gradients
.
size
(),
&
middle_begin
,
&
middle_end
);
EXPECT_EQ
(
gradients
[
middle_begin
+
1
],
gradients
[
middle_end
-
1
]);
EXPECT_GT
(
gradients
[
0
],
gradients
[
middle_begin
+
1
]);
EXPECT_GT
(
gradients
[
middle_begin
+
1
],
gradients
.
back
());
}
TEST
(
Partition
,
PartitionOneElement
)
{
std
::
vector
<
score_t
>
gradients
({
0.5
f
});
data_size_t
middle_begin
,
middle_end
;
ArrayArgs
<
score_t
>::
Partition
(
&
gradients
,
0
,
gradients
.
size
(),
&
middle_begin
,
&
middle_end
);
EXPECT_EQ
(
gradients
[
middle_begin
+
1
],
gradients
[
middle_end
-
1
]);
}
TEST
(
Partition
,
Empty
)
{
std
::
vector
<
score_t
>
gradients
;
data_size_t
middle_begin
,
middle_end
;
ArrayArgs
<
score_t
>::
Partition
(
&
gradients
,
0
,
gradients
.
size
(),
&
middle_begin
,
&
middle_end
);
EXPECT_EQ
(
middle_begin
,
-
1
);
EXPECT_EQ
(
middle_end
,
0
);
}
TEST
(
Partition
,
AllEqual
)
{
std
::
vector
<
score_t
>
gradients
({
0.5
f
,
0.5
f
,
0.5
f
});
data_size_t
middle_begin
,
middle_end
;
ArrayArgs
<
score_t
>::
Partition
(
&
gradients
,
0
,
gradients
.
size
(),
&
middle_begin
,
&
middle_end
);
EXPECT_EQ
(
gradients
[
middle_begin
+
1
],
gradients
[
middle_end
-
1
]);
EXPECT_EQ
(
middle_begin
,
-
1
);
EXPECT_EQ
(
middle_end
,
3
);
}
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