Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
N
ngraph
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ngraph
Commits
94649220
Commit
94649220
authored
May 22, 2019
by
Adam Rogowiec
Committed by
arogowie-intel
May 22, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Unit tests.
parent
1b77ada7
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
312 additions
and
0 deletions
+312
-0
backend_fused_op.in.cpp
test/backend_fused_op.in.cpp
+312
-0
No files found.
test/backend_fused_op.in.cpp
View file @
94649220
...
...
@@ -934,3 +934,315 @@ NGRAPH_TEST(${BACKEND_NAME}, split_var_len_parts)
test_case
.
run
();
}
NGRAPH_TEST
(
$
{
BACKEND_NAME
},
lstm_cell_no_bias_no_peepholes
)
{
const
size_t
batch_size
=
2
;
const
size_t
input_size
=
3
;
const
size_t
hidden_size
=
3
;
const
size_t
gates_count
=
4
;
const
auto
X
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
input_size
});
const
auto
W
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
input_size
});
const
auto
R
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
hidden_size
});
const
auto
H_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
C_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
lstm_cell
=
make_shared
<
op
::
LSTMCell
>
(
X
,
W
,
R
,
H_t
,
C_t
,
hidden_size
);
auto
function
=
make_shared
<
Function
>
(
lstm_cell
->
decompose_op
(),
ParameterVector
{
X
,
W
,
R
,
H_t
,
C_t
});
auto
test_case
=
ngraph
::
test
::
NgraphTestCase
(
function
,
"${BACKEND_NAME}"
);
// X
test_case
.
add_input
<
float
>
(
{
0.81342685
f
,
0.84108883
f
,
0.8152282
f
,
0.46893653
f
,
0.0901856
f
,
0.37088776
f
});
// W
test_case
.
add_input
<
float
>
({
3.3330739e-01
f
,
3.6229487e-04
f
,
4.6773660e-01
f
,
4.3046016e-01
f
,
7.3950343e-02
f
,
3.8063636e-01
f
,
9.6921772e-01
f
,
9.6897459e-01
f
,
6.2964785e-01
f
,
3.1134409e-01
f
,
8.4709978e-01
f
,
9.4928098e-01
f
,
6.1676943e-01
f
,
6.6020679e-01
f
,
1.9072217e-01
f
,
8.8032126e-02
f
,
4.0472135e-01
f
,
6.8342745e-01
f
,
8.3432144e-01
f
,
4.4928190e-01
f
,
7.9524308e-01
f
,
5.3966165e-01
f
,
8.5936421e-01
f
,
8.3136767e-01
f
,
5.5125546e-02
f
,
4.7791195e-01
f
,
3.5788772e-01
f
,
6.7507404e-01
f
,
2.1716513e-01
f
,
2.7473119e-01
f
,
3.3999152e-02
f
,
9.6835363e-01
f
,
3.7581277e-01
f
,
2.4026000e-01
f
,
6.7418844e-01
f
,
3.4199652e-01
f
});
// R
test_case
.
add_input
<
float
>
(
{
0.0987983
f
,
0.52032113
f
,
0.5848073
f
,
0.5356095
f
,
0.74497133
f
,
0.73260087
f
,
0.1700787
f
,
0.45684233
f
,
0.1495722
f
,
0.42734373
f
,
0.4433832
f
,
0.25906256
f
,
0.03854987
f
,
0.47480518
f
,
0.37215272
f
,
0.99890584
f
,
0.74019486
f
,
0.3518967
f
,
0.6881257
f
,
0.8170279
f
,
0.54088944
f
,
0.81225616
f
,
0.14619833
f
,
0.42941234
f
,
0.86843914
f
,
0.45967972
f
,
0.6237719
f
,
0.11074839
f
,
0.6029616
f
,
0.3149305
f
,
0.46504205
f
,
0.5843412
f
,
0.8733427
f
,
0.7687243
f
,
0.07074859
f
,
0.39188156
f
});
// Ht
test_case
.
add_input
<
float
>
(
{
0.77956
f
,
0.5331557
f
,
0.04297554
f
,
0.7962175
f
,
0.7635707
f
,
0.11989366
f
});
// Ct
test_case
.
add_input
<
float
>
(
{
0.8488452
f
,
0.18851636
f
,
0.5020695
f
,
0.29716516
f
,
0.06740791
f
,
0.45384037
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
0.81457126
f
,
0.61109227
f
,
0.769522
f
,
0.52239674
f
,
0.4324641
f
,
0.63183
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
1.4444952
f
,
0.9635685
f
,
1.2875274
f
,
0.8053419
f
,
0.7184521
f
,
0.95803297
f
});
test_case
.
run
();
}
NGRAPH_TEST
(
$
{
BACKEND_NAME
},
lstm_cell_bias_peepholes
)
{
const
size_t
batch_size
=
2
;
const
size_t
input_size
=
3
;
const
size_t
hidden_size
=
3
;
const
size_t
gates_count
=
4
;
const
auto
X
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
input_size
});
const
auto
W
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
input_size
});
const
auto
R
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
hidden_size
});
const
auto
H_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
C_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
B
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
2
*
gates_count
*
hidden_size
});
const
auto
P
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
3
*
hidden_size
});
const
auto
lstm_cell
=
make_shared
<
op
::
LSTMCell
>
(
X
,
W
,
R
,
H_t
,
C_t
,
hidden_size
,
B
,
P
);
auto
function
=
make_shared
<
Function
>
(
lstm_cell
->
decompose_op
(),
ParameterVector
{
X
,
W
,
R
,
H_t
,
C_t
,
B
,
P
});
auto
test_case
=
ngraph
::
test
::
NgraphTestCase
(
function
,
"${BACKEND_NAME}"
);
// X
test_case
.
add_input
<
float
>
(
{
0.81342685
f
,
0.84108883
f
,
0.8152282
f
,
0.46893653
f
,
0.0901856
f
,
0.37088776
f
});
// W
test_case
.
add_input
<
float
>
({
3.3330739e-01
f
,
3.6229487e-04
f
,
4.6773660e-01
f
,
4.3046016e-01
f
,
7.3950343e-02
f
,
3.8063636e-01
f
,
9.6921772e-01
f
,
9.6897459e-01
f
,
6.2964785e-01
f
,
3.1134409e-01
f
,
8.4709978e-01
f
,
9.4928098e-01
f
,
6.1676943e-01
f
,
6.6020679e-01
f
,
1.9072217e-01
f
,
8.8032126e-02
f
,
4.0472135e-01
f
,
6.8342745e-01
f
,
8.3432144e-01
f
,
4.4928190e-01
f
,
7.9524308e-01
f
,
5.3966165e-01
f
,
8.5936421e-01
f
,
8.3136767e-01
f
,
5.5125546e-02
f
,
4.7791195e-01
f
,
3.5788772e-01
f
,
6.7507404e-01
f
,
2.1716513e-01
f
,
2.7473119e-01
f
,
3.3999152e-02
f
,
9.6835363e-01
f
,
3.7581277e-01
f
,
2.4026000e-01
f
,
6.7418844e-01
f
,
3.4199652e-01
f
});
// R
test_case
.
add_input
<
float
>
(
{
0.0987983
f
,
0.52032113
f
,
0.5848073
f
,
0.5356095
f
,
0.74497133
f
,
0.73260087
f
,
0.1700787
f
,
0.45684233
f
,
0.1495722
f
,
0.42734373
f
,
0.4433832
f
,
0.25906256
f
,
0.03854987
f
,
0.47480518
f
,
0.37215272
f
,
0.99890584
f
,
0.74019486
f
,
0.3518967
f
,
0.6881257
f
,
0.8170279
f
,
0.54088944
f
,
0.81225616
f
,
0.14619833
f
,
0.42941234
f
,
0.86843914
f
,
0.45967972
f
,
0.6237719
f
,
0.11074839
f
,
0.6029616
f
,
0.3149305
f
,
0.46504205
f
,
0.5843412
f
,
0.8733427
f
,
0.7687243
f
,
0.07074859
f
,
0.39188156
f
});
// Ht
test_case
.
add_input
<
float
>
(
{
0.77956
f
,
0.5331557
f
,
0.04297554
f
,
0.7962175
f
,
0.7635707
f
,
0.11989366
f
});
// Ct
test_case
.
add_input
<
float
>
(
{
0.8488452
f
,
0.18851636
f
,
0.5020695
f
,
0.29716516
f
,
0.06740791
f
,
0.45384037
f
});
// B
test_case
.
add_input
<
float
>
({
0.81130236
f
,
0.31332242
f
,
0.6423671
f
,
0.09981899
f
,
0.7847627
f
,
0.8405669
f
,
0.0330242
f
,
0.45014873
f
,
0.5599519
f
,
0.31807426
f
,
0.7356558
f
,
0.6298691
f
,
0.26263478
f
,
0.8391581
f
,
0.52434635
f
,
0.11468413
f
,
0.4533051
f
,
0.67632145
f
,
0.43415946
f
,
0.46795473
f
,
0.5674715
f
,
0.19214648
f
,
0.37824264
f
,
0.11187395
f
});
// P
test_case
.
add_input
<
float
>
({
0.38557124
f
,
0.9482306
f
,
0.6808912
f
,
0.93585867
f
,
0.74540526
f
,
0.10507805
f
,
0.8180733
f
,
0.13840231
f
,
0.24175227
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
0.9218244
f
,
0.78787273
f
,
0.8754273
f
,
0.7361462
f
,
0.70927656
f
,
0.83522964
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
1.7094649
f
,
1.1259761
f
,
1.444019
f
,
1.086587
f
,
0.9762144
f
,
1.3066899
f
});
test_case
.
run
();
}
NGRAPH_TEST
(
$
{
BACKEND_NAME
},
lstm_cell_bias_peepholes_clip_input_forget
)
{
const
size_t
batch_size
=
2
;
const
size_t
input_size
=
3
;
const
size_t
hidden_size
=
3
;
const
size_t
gates_count
=
4
;
const
float
clip_threshold
=
3.5
f
;
bool
input_forget
=
true
;
const
auto
X
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
input_size
});
const
auto
W
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
input_size
});
const
auto
R
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
hidden_size
});
const
auto
H_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
C_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
B
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
2
*
gates_count
*
hidden_size
});
const
auto
P
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
3
*
hidden_size
});
const
auto
lstm_cell
=
make_shared
<
op
::
LSTMCell
>
(
X
,
W
,
R
,
H_t
,
C_t
,
hidden_size
,
B
,
P
,
vector
<
string
>
{
"sigmoid"
,
"tanh"
,
"tanh"
},
vector
<
float
>
{},
vector
<
float
>
{},
clip_threshold
,
input_forget
);
auto
function
=
make_shared
<
Function
>
(
lstm_cell
->
decompose_op
(),
ParameterVector
{
X
,
W
,
R
,
H_t
,
C_t
,
B
,
P
});
auto
test_case
=
ngraph
::
test
::
NgraphTestCase
(
function
,
"${BACKEND_NAME}"
);
// X
test_case
.
add_input
<
float
>
(
{
0.81342685
f
,
0.84108883
f
,
0.8152282
f
,
0.46893653
f
,
0.0901856
f
,
0.37088776
f
});
// W
test_case
.
add_input
<
float
>
({
3.3330739e-01
f
,
3.6229487e-04
f
,
4.6773660e-01
f
,
4.3046016e-01
f
,
7.3950343e-02
f
,
3.8063636e-01
f
,
9.6921772e-01
f
,
9.6897459e-01
f
,
6.2964785e-01
f
,
3.1134409e-01
f
,
8.4709978e-01
f
,
9.4928098e-01
f
,
6.1676943e-01
f
,
6.6020679e-01
f
,
1.9072217e-01
f
,
8.8032126e-02
f
,
4.0472135e-01
f
,
6.8342745e-01
f
,
8.3432144e-01
f
,
4.4928190e-01
f
,
7.9524308e-01
f
,
5.3966165e-01
f
,
8.5936421e-01
f
,
8.3136767e-01
f
,
5.5125546e-02
f
,
4.7791195e-01
f
,
3.5788772e-01
f
,
6.7507404e-01
f
,
2.1716513e-01
f
,
2.7473119e-01
f
,
3.3999152e-02
f
,
9.6835363e-01
f
,
3.7581277e-01
f
,
2.4026000e-01
f
,
6.7418844e-01
f
,
3.4199652e-01
f
});
// R
test_case
.
add_input
<
float
>
(
{
0.0987983
f
,
0.52032113
f
,
0.5848073
f
,
0.5356095
f
,
0.74497133
f
,
0.73260087
f
,
0.1700787
f
,
0.45684233
f
,
0.1495722
f
,
0.42734373
f
,
0.4433832
f
,
0.25906256
f
,
0.03854987
f
,
0.47480518
f
,
0.37215272
f
,
0.99890584
f
,
0.74019486
f
,
0.3518967
f
,
0.6881257
f
,
0.8170279
f
,
0.54088944
f
,
0.81225616
f
,
0.14619833
f
,
0.42941234
f
,
0.86843914
f
,
0.45967972
f
,
0.6237719
f
,
0.11074839
f
,
0.6029616
f
,
0.3149305
f
,
0.46504205
f
,
0.5843412
f
,
0.8733427
f
,
0.7687243
f
,
0.07074859
f
,
0.39188156
f
});
// Ht
test_case
.
add_input
<
float
>
(
{
0.77956
f
,
0.5331557
f
,
0.04297554
f
,
0.7962175
f
,
0.7635707
f
,
0.11989366
f
});
// Ct
test_case
.
add_input
<
float
>
(
{
0.8488452
f
,
0.18851636
f
,
0.5020695
f
,
0.29716516
f
,
0.06740791
f
,
0.45384037
f
});
// B
test_case
.
add_input
<
float
>
({
0.81130236
f
,
0.31332242
f
,
0.6423671
f
,
0.09981899
f
,
0.7847627
f
,
0.8405669
f
,
0.0330242
f
,
0.45014873
f
,
0.5599519
f
,
0.31807426
f
,
0.7356558
f
,
0.6298691
f
,
0.26263478
f
,
0.8391581
f
,
0.52434635
f
,
0.11468413
f
,
0.4533051
f
,
0.67632145
f
,
0.43415946
f
,
0.46795473
f
,
0.5674715
f
,
0.19214648
f
,
0.37824264
f
,
0.11187395
f
});
// P
test_case
.
add_input
<
float
>
({
0.38557124
f
,
0.9482306
f
,
0.6808912
f
,
0.93585867
f
,
0.74540526
f
,
0.10507805
f
,
0.8180733
f
,
0.13840231
f
,
0.24175227
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
0.71485436
f
,
0.71844107
f
,
0.72704613
f
,
0.6235602
f
,
0.68306124
f
,
0.6978715
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
0.94656503
f
,
0.9527454
f
,
0.9706756
f
,
0.84206575
f
,
0.91898793
f
,
0.9127192
f
});
test_case
.
run
();
}
NGRAPH_TEST
(
$
{
BACKEND_NAME
},
lstm_cell_activaction_functions
)
{
const
size_t
batch_size
=
2
;
const
size_t
input_size
=
3
;
const
size_t
hidden_size
=
3
;
const
size_t
gates_count
=
4
;
const
float
clip_threshold
=
3.5
f
;
bool
input_forget
=
true
;
vector
<
string
>
activations
{
"sigmoid"
,
"tanh"
,
"hardsigmoid"
};
vector
<
float
>
activation_alpha
{
0.
f
,
0.
f
,
1.8345
f
};
vector
<
float
>
activation_beta
{
0.
f
,
0.
f
,
3.05
f
};
const
auto
X
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
input_size
});
const
auto
W
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
input_size
});
const
auto
R
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
gates_count
*
hidden_size
,
hidden_size
});
const
auto
H_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
C_t
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
batch_size
,
hidden_size
});
const
auto
B
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
2
*
gates_count
*
hidden_size
});
const
auto
P
=
make_shared
<
op
::
Parameter
>
(
element
::
f32
,
Shape
{
3
*
hidden_size
});
const
auto
lstm_cell
=
make_shared
<
op
::
LSTMCell
>
(
X
,
W
,
R
,
H_t
,
C_t
,
hidden_size
,
B
,
P
,
activations
,
activation_alpha
,
activation_beta
,
clip_threshold
,
input_forget
);
auto
function
=
make_shared
<
Function
>
(
lstm_cell
->
decompose_op
(),
ParameterVector
{
X
,
W
,
R
,
H_t
,
C_t
,
B
,
P
});
auto
test_case
=
ngraph
::
test
::
NgraphTestCase
(
function
,
"${BACKEND_NAME}"
);
// X
test_case
.
add_input
<
float
>
(
{
0.81342685
f
,
0.84108883
f
,
0.8152282
f
,
0.46893653
f
,
0.0901856
f
,
0.37088776
f
});
// W
test_case
.
add_input
<
float
>
({
3.3330739e-01
f
,
3.6229487e-04
f
,
4.6773660e-01
f
,
4.3046016e-01
f
,
7.3950343e-02
f
,
3.8063636e-01
f
,
9.6921772e-01
f
,
9.6897459e-01
f
,
6.2964785e-01
f
,
3.1134409e-01
f
,
8.4709978e-01
f
,
9.4928098e-01
f
,
6.1676943e-01
f
,
6.6020679e-01
f
,
1.9072217e-01
f
,
8.8032126e-02
f
,
4.0472135e-01
f
,
6.8342745e-01
f
,
8.3432144e-01
f
,
4.4928190e-01
f
,
7.9524308e-01
f
,
5.3966165e-01
f
,
8.5936421e-01
f
,
8.3136767e-01
f
,
5.5125546e-02
f
,
4.7791195e-01
f
,
3.5788772e-01
f
,
6.7507404e-01
f
,
2.1716513e-01
f
,
2.7473119e-01
f
,
3.3999152e-02
f
,
9.6835363e-01
f
,
3.7581277e-01
f
,
2.4026000e-01
f
,
6.7418844e-01
f
,
3.4199652e-01
f
});
// R
test_case
.
add_input
<
float
>
(
{
0.0987983
f
,
0.52032113
f
,
0.5848073
f
,
0.5356095
f
,
0.74497133
f
,
0.73260087
f
,
0.1700787
f
,
0.45684233
f
,
0.1495722
f
,
0.42734373
f
,
0.4433832
f
,
0.25906256
f
,
0.03854987
f
,
0.47480518
f
,
0.37215272
f
,
0.99890584
f
,
0.74019486
f
,
0.3518967
f
,
0.6881257
f
,
0.8170279
f
,
0.54088944
f
,
0.81225616
f
,
0.14619833
f
,
0.42941234
f
,
0.86843914
f
,
0.45967972
f
,
0.6237719
f
,
0.11074839
f
,
0.6029616
f
,
0.3149305
f
,
0.46504205
f
,
0.5843412
f
,
0.8733427
f
,
0.7687243
f
,
0.07074859
f
,
0.39188156
f
});
// Ht
test_case
.
add_input
<
float
>
(
{
0.77956
f
,
0.5331557
f
,
0.04297554
f
,
0.7962175
f
,
0.7635707
f
,
0.11989366
f
});
// Ct
test_case
.
add_input
<
float
>
(
{
0.8488452
f
,
0.18851636
f
,
0.5020695
f
,
0.29716516
f
,
0.06740791
f
,
0.45384037
f
});
// B
test_case
.
add_input
<
float
>
({
0.81130236
f
,
0.31332242
f
,
0.6423671
f
,
0.09981899
f
,
0.7847627
f
,
0.8405669
f
,
0.0330242
f
,
0.45014873
f
,
0.5599519
f
,
0.31807426
f
,
0.7356558
f
,
0.6298691
f
,
0.26263478
f
,
0.8391581
f
,
0.52434635
f
,
0.11468413
f
,
0.4533051
f
,
0.67632145
f
,
0.43415946
f
,
0.46795473
f
,
0.5674715
f
,
0.19214648
f
,
0.37824264
f
,
0.11187395
f
});
// P
test_case
.
add_input
<
float
>
({
0.38557124
f
,
0.9482306
f
,
0.6808912
f
,
0.93585867
f
,
0.74540526
f
,
0.10507805
f
,
0.8180733
f
,
0.13840231
f
,
0.24175227
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
0.96834344
f
,
0.9695254
f
,
0.97068775
f
,
0.9077866
f
,
0.94161016
f
,
0.96599925
f
});
test_case
.
add_expected_output
<
float
>
(
Shape
{
batch_size
,
hidden_size
},
{
0.94656503
f
,
0.9527454
f
,
0.9706756
f
,
0.84206575
f
,
0.91898793
f
,
0.9127192
f
});
test_case
.
run
();
}
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