1 /*******************************************************************************
2 * Copyright 2019-2020 Intel Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *******************************************************************************/
16 
17 #define EPS 1e-5f
18 
19 #define EXPAND_FORMATS(data, stat, diff) \
20     memory::format_tag::data, memory::format_tag::stat, memory::format_tag::diff
21 
22 #define PARAMS_NC(...) \
23     test_lnorm_params_t { \
24         EXPAND_FORMATS(ab, a, ab), __VA_ARGS__, EPS, false, dnnl_success \
25     }
26 
27 #define PARAMS_TNC(...) \
28     test_lnorm_params_t { \
29         EXPAND_FORMATS(abc, ab, abc), __VA_ARGS__, EPS, false, dnnl_success \
30     }
31 
32 #define PARAMS_TNC_CROSS_CASE(...) \
33     test_lnorm_params_t { \
34         EXPAND_FORMATS(abc, ba, abc), __VA_ARGS__, EPS, false, dnnl_success \
35     }
36 
37 #define PARAMS_NTC(...) \
38     test_lnorm_params_t { \
39         EXPAND_FORMATS(bac, ba, bac), __VA_ARGS__, EPS, false, dnnl_success \
40     }
41 
42 #define PARAMS_LDSNC(...) \
43     test_lnorm_params_t { \
44         EXPAND_FORMATS(abcde, abcd, abcde), __VA_ARGS__, EPS, false, \
45                 dnnl_success \
46     }
47 
48 #define PARAMS_LDSNC_CROSS_CASE(...) \
49     test_lnorm_params_t { \
50         EXPAND_FORMATS(abcde, acdb, abcde), __VA_ARGS__, EPS, false, \
51                 dnnl_success \
52     }
53 
54 #define PARAMS_EF(...) \
55     test_lnorm_params_t { EXPAND_FORMATS(abc, ab, abc), __VA_ARGS__ }
56 
57 #define CPU_INST_TEST_CASE(str, ...) \
58     CPU_INSTANTIATE_TEST_SUITE_P( \
59             str, lnorm_test_t, ::testing::Values(__VA_ARGS__));
60 
61 CPU_INST_TEST_CASE(SimpleExpectedFails,
62         PARAMS_EF({-1, 27, 9}, EPS, true, dnnl_invalid_arguments),
63         PARAMS_EF({1, -12, 10}, EPS, true, dnnl_invalid_arguments),
64         PARAMS_EF({4, 20, -12}, EPS, true, dnnl_invalid_arguments));
65 
66 CPU_INST_TEST_CASE(SimpleZeroDim, PARAMS_NC({0, 9}), PARAMS_NC({1, 0}));
67 
68 CPU_INST_TEST_CASE(
69         Simple_NC, PARAMS_NC({1, 100}), PARAMS_NC({20, 8}), PARAMS_NC({2, 10}));
70 
71 CPU_INST_TEST_CASE(Simple_TNC, PARAMS_TNC({6, 32, 8}), PARAMS_TNC({2, 10, 4}),
72         PARAMS_TNC({2, 8, 16}));
73 
74 CPU_INST_TEST_CASE(CrossCase_TNC, PARAMS_TNC_CROSS_CASE({6, 32, 8}),
75         PARAMS_TNC_CROSS_CASE({2, 10, 4}), PARAMS_TNC_CROSS_CASE({2, 8, 16}));
76 
77 CPU_INST_TEST_CASE(Simple_NTC, PARAMS_TNC({64, 32, 8}), PARAMS_TNC({32, 10, 4}),
78         PARAMS_TNC({12, 8, 16}));
79 
80 CPU_INST_TEST_CASE(Simple_LDSNC, PARAMS_LDSNC({6, 2, 2, 32, 8}),
81         PARAMS_LDSNC({2, 2, 2, 10, 4}), PARAMS_LDSNC({2, 2, 2, 8, 16}));
82 
83 CPU_INST_TEST_CASE(CrossCase_LDSNC, PARAMS_LDSNC_CROSS_CASE({6, 2, 2, 32, 8}),
84         PARAMS_LDSNC_CROSS_CASE({2, 2, 2, 10, 4}),
85         PARAMS_LDSNC_CROSS_CASE({2, 2, 2, 8, 16}));
86