xref: /aosp_15_r20/external/cronet/third_party/abseil-cpp/absl/random/BUILD.bazel (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1#
2# Copyright 2019 The Abseil Authors.
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#      https://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# ABSL random-number generation libraries.
18
19load(
20    "//absl:copts/configure_copts.bzl",
21    "ABSL_DEFAULT_COPTS",
22    "ABSL_DEFAULT_LINKOPTS",
23    "ABSL_TEST_COPTS",
24)
25
26package(
27    default_visibility = ["//visibility:public"],
28    features = [
29        "header_modules",
30        "layering_check",
31        "parse_headers",
32    ],
33)
34
35licenses(["notice"])
36
37cc_library(
38    name = "random",
39    hdrs = ["random.h"],
40    copts = ABSL_DEFAULT_COPTS,
41    linkopts = ABSL_DEFAULT_LINKOPTS,
42    deps = [
43        ":distributions",
44        ":seed_sequences",
45        "//absl/random/internal:nonsecure_base",
46        "//absl/random/internal:pcg_engine",
47        "//absl/random/internal:pool_urbg",
48        "//absl/random/internal:randen_engine",
49    ],
50)
51
52cc_library(
53    name = "distributions",
54    srcs = [
55        "discrete_distribution.cc",
56        "gaussian_distribution.cc",
57    ],
58    hdrs = [
59        "bernoulli_distribution.h",
60        "beta_distribution.h",
61        "discrete_distribution.h",
62        "distributions.h",
63        "exponential_distribution.h",
64        "gaussian_distribution.h",
65        "log_uniform_int_distribution.h",
66        "poisson_distribution.h",
67        "uniform_int_distribution.h",
68        "uniform_real_distribution.h",
69        "zipf_distribution.h",
70    ],
71    copts = ABSL_DEFAULT_COPTS,
72    linkopts = ABSL_DEFAULT_LINKOPTS,
73    deps = [
74        "//absl/base:base_internal",
75        "//absl/base:config",
76        "//absl/base:core_headers",
77        "//absl/meta:type_traits",
78        "//absl/numeric:bits",
79        "//absl/random/internal:distribution_caller",
80        "//absl/random/internal:fast_uniform_bits",
81        "//absl/random/internal:fastmath",
82        "//absl/random/internal:generate_real",
83        "//absl/random/internal:iostream_state_saver",
84        "//absl/random/internal:traits",
85        "//absl/random/internal:uniform_helper",
86        "//absl/random/internal:wide_multiply",
87        "//absl/strings",
88    ],
89)
90
91cc_library(
92    name = "seed_gen_exception",
93    srcs = ["seed_gen_exception.cc"],
94    hdrs = ["seed_gen_exception.h"],
95    copts = ABSL_DEFAULT_COPTS,
96    linkopts = ABSL_DEFAULT_LINKOPTS,
97    deps = ["//absl/base:config"],
98)
99
100cc_library(
101    name = "seed_sequences",
102    srcs = ["seed_sequences.cc"],
103    hdrs = [
104        "seed_sequences.h",
105    ],
106    copts = ABSL_DEFAULT_COPTS,
107    linkopts = ABSL_DEFAULT_LINKOPTS,
108    deps = [
109        ":seed_gen_exception",
110        "//absl/base:config",
111        "//absl/base:nullability",
112        "//absl/random/internal:pool_urbg",
113        "//absl/random/internal:salted_seed_seq",
114        "//absl/random/internal:seed_material",
115        "//absl/strings:string_view",
116        "//absl/types:span",
117    ],
118)
119
120cc_library(
121    name = "bit_gen_ref",
122    hdrs = ["bit_gen_ref.h"],
123    copts = ABSL_DEFAULT_COPTS,
124    linkopts = ABSL_DEFAULT_LINKOPTS,
125    deps = [
126        ":random",
127        "//absl/base:core_headers",
128        "//absl/base:fast_type_id",
129        "//absl/meta:type_traits",
130        "//absl/random/internal:distribution_caller",
131        "//absl/random/internal:fast_uniform_bits",
132    ],
133)
134
135cc_library(
136    name = "mock_distributions",
137    testonly = True,
138    hdrs = ["mock_distributions.h"],
139    linkopts = ABSL_DEFAULT_LINKOPTS,
140    deps = [
141        ":distributions",
142        ":mocking_bit_gen",
143        "//absl/meta:type_traits",
144        "//absl/random/internal:mock_overload_set",
145        "@com_google_googletest//:gtest",
146    ],
147)
148
149cc_library(
150    name = "mocking_bit_gen",
151    testonly = True,
152    hdrs = [
153        "mocking_bit_gen.h",
154    ],
155    linkopts = ABSL_DEFAULT_LINKOPTS,
156    deps = [
157        ":distributions",
158        ":random",
159        "//absl/base:fast_type_id",
160        "//absl/container:flat_hash_map",
161        "//absl/meta:type_traits",
162        "//absl/random/internal:distribution_caller",
163        "//absl/strings",
164        "//absl/types:span",
165        "//absl/types:variant",
166        "//absl/utility",
167        "@com_google_googletest//:gtest",
168    ],
169)
170
171cc_test(
172    name = "bernoulli_distribution_test",
173    size = "small",
174    timeout = "eternal",  # Android can take a very long time
175    srcs = ["bernoulli_distribution_test.cc"],
176    copts = ABSL_TEST_COPTS,
177    linkopts = ABSL_DEFAULT_LINKOPTS,
178    deps = [
179        ":distributions",
180        ":random",
181        "//absl/random/internal:pcg_engine",
182        "//absl/random/internal:sequence_urbg",
183        "@com_google_googletest//:gtest",
184        "@com_google_googletest//:gtest_main",
185    ],
186)
187
188cc_test(
189    name = "beta_distribution_test",
190    size = "small",
191    timeout = "eternal",  # Android can take a very long time
192    srcs = ["beta_distribution_test.cc"],
193    copts = ABSL_TEST_COPTS,
194    flaky = 1,
195    linkopts = ABSL_DEFAULT_LINKOPTS,
196    tags = [
197        "no_test_wasm",
198    ],
199    deps = [
200        ":distributions",
201        ":random",
202        "//absl/log",
203        "//absl/numeric:representation",
204        "//absl/random/internal:distribution_test_util",
205        "//absl/random/internal:pcg_engine",
206        "//absl/random/internal:sequence_urbg",
207        "//absl/strings",
208        "//absl/strings:str_format",
209        "@com_google_googletest//:gtest",
210        "@com_google_googletest//:gtest_main",
211    ],
212)
213
214cc_test(
215    name = "distributions_test",
216    size = "small",
217    timeout = "moderate",
218    srcs = [
219        "distributions_test.cc",
220    ],
221    copts = ABSL_TEST_COPTS,
222    linkopts = ABSL_DEFAULT_LINKOPTS,
223    deps = [
224        ":distributions",
225        ":random",
226        "//absl/random/internal:distribution_test_util",
227        "@com_google_googletest//:gtest",
228        "@com_google_googletest//:gtest_main",
229    ],
230)
231
232cc_test(
233    name = "generators_test",
234    size = "small",
235    srcs = ["generators_test.cc"],
236    copts = ABSL_TEST_COPTS,
237    linkopts = ABSL_DEFAULT_LINKOPTS,
238    deps = [
239        ":distributions",
240        ":random",
241        "@com_google_googletest//:gtest",
242        "@com_google_googletest//:gtest_main",
243    ],
244)
245
246cc_test(
247    name = "log_uniform_int_distribution_test",
248    size = "medium",
249    srcs = [
250        "log_uniform_int_distribution_test.cc",
251    ],
252    copts = ABSL_TEST_COPTS,
253    linkopts = ABSL_DEFAULT_LINKOPTS,
254    tags = [
255        "no_test_wasm",  # Does not converge on WASM.
256    ],
257    deps = [
258        ":distributions",
259        ":random",
260        "//absl/log",
261        "//absl/random/internal:distribution_test_util",
262        "//absl/random/internal:pcg_engine",
263        "//absl/random/internal:sequence_urbg",
264        "//absl/strings",
265        "//absl/strings:str_format",
266        "@com_google_googletest//:gtest",
267        "@com_google_googletest//:gtest_main",
268    ],
269)
270
271cc_test(
272    name = "discrete_distribution_test",
273    size = "medium",
274    srcs = [
275        "discrete_distribution_test.cc",
276    ],
277    copts = ABSL_TEST_COPTS,
278    linkopts = ABSL_DEFAULT_LINKOPTS,
279    deps = [
280        ":distributions",
281        ":random",
282        "//absl/log",
283        "//absl/random/internal:distribution_test_util",
284        "//absl/random/internal:pcg_engine",
285        "//absl/random/internal:sequence_urbg",
286        "//absl/strings",
287        "@com_google_googletest//:gtest",
288        "@com_google_googletest//:gtest_main",
289    ],
290)
291
292cc_test(
293    name = "poisson_distribution_test",
294    size = "small",
295    timeout = "eternal",  # Android can take a very long time
296    srcs = [
297        "poisson_distribution_test.cc",
298    ],
299    copts = ABSL_TEST_COPTS,
300    linkopts = ABSL_DEFAULT_LINKOPTS,
301    tags = [
302        # Too Slow.
303        "no_test_android_arm",
304        "no_test_loonix",
305    ],
306    deps = [
307        ":distributions",
308        ":random",
309        "//absl/base:core_headers",
310        "//absl/container:flat_hash_map",
311        "//absl/log",
312        "//absl/random/internal:distribution_test_util",
313        "//absl/random/internal:pcg_engine",
314        "//absl/random/internal:sequence_urbg",
315        "//absl/strings",
316        "//absl/strings:str_format",
317        "@com_google_googletest//:gtest",
318        "@com_google_googletest//:gtest_main",
319    ],
320)
321
322cc_test(
323    name = "exponential_distribution_test",
324    size = "small",
325    timeout = "moderate",
326    srcs = ["exponential_distribution_test.cc"],
327    copts = ABSL_TEST_COPTS,
328    linkopts = ABSL_DEFAULT_LINKOPTS,
329    deps = [
330        ":distributions",
331        ":random",
332        "//absl/base:core_headers",
333        "//absl/log",
334        "//absl/numeric:representation",
335        "//absl/random/internal:distribution_test_util",
336        "//absl/random/internal:pcg_engine",
337        "//absl/random/internal:sequence_urbg",
338        "//absl/strings",
339        "//absl/strings:str_format",
340        "@com_google_googletest//:gtest",
341        "@com_google_googletest//:gtest_main",
342    ],
343)
344
345cc_test(
346    name = "gaussian_distribution_test",
347    size = "small",
348    timeout = "eternal",  # Android can take a very long time
349    srcs = [
350        "gaussian_distribution_test.cc",
351    ],
352    copts = ABSL_TEST_COPTS,
353    linkopts = ABSL_DEFAULT_LINKOPTS,
354    deps = [
355        ":distributions",
356        ":random",
357        "//absl/base:core_headers",
358        "//absl/log",
359        "//absl/numeric:representation",
360        "//absl/random/internal:distribution_test_util",
361        "//absl/random/internal:sequence_urbg",
362        "//absl/strings",
363        "//absl/strings:str_format",
364        "@com_google_googletest//:gtest",
365        "@com_google_googletest//:gtest_main",
366    ],
367)
368
369cc_test(
370    name = "uniform_int_distribution_test",
371    size = "medium",
372    timeout = "long",
373    srcs = [
374        "uniform_int_distribution_test.cc",
375    ],
376    copts = ABSL_TEST_COPTS,
377    linkopts = ABSL_DEFAULT_LINKOPTS,
378    deps = [
379        ":distributions",
380        ":random",
381        "//absl/log",
382        "//absl/random/internal:distribution_test_util",
383        "//absl/random/internal:pcg_engine",
384        "//absl/random/internal:sequence_urbg",
385        "//absl/strings",
386        "@com_google_googletest//:gtest",
387        "@com_google_googletest//:gtest_main",
388    ],
389)
390
391cc_test(
392    name = "uniform_real_distribution_test",
393    size = "medium",
394    srcs = [
395        "uniform_real_distribution_test.cc",
396    ],
397    copts = ABSL_TEST_COPTS,
398    linkopts = ABSL_DEFAULT_LINKOPTS,
399    tags = [
400        "no_test_android_arm",
401        "no_test_android_arm64",
402        "no_test_android_x86",
403    ],
404    deps = [
405        ":distributions",
406        ":random",
407        "//absl/log",
408        "//absl/numeric:representation",
409        "//absl/random/internal:distribution_test_util",
410        "//absl/random/internal:pcg_engine",
411        "//absl/random/internal:sequence_urbg",
412        "//absl/strings",
413        "@com_google_googletest//:gtest",
414        "@com_google_googletest//:gtest_main",
415    ],
416)
417
418cc_test(
419    name = "zipf_distribution_test",
420    size = "medium",
421    srcs = [
422        "zipf_distribution_test.cc",
423    ],
424    copts = ABSL_TEST_COPTS,
425    linkopts = ABSL_DEFAULT_LINKOPTS,
426    deps = [
427        ":distributions",
428        ":random",
429        "//absl/log",
430        "//absl/random/internal:distribution_test_util",
431        "//absl/random/internal:pcg_engine",
432        "//absl/random/internal:sequence_urbg",
433        "//absl/strings",
434        "@com_google_googletest//:gtest",
435        "@com_google_googletest//:gtest_main",
436    ],
437)
438
439cc_test(
440    name = "bit_gen_ref_test",
441    size = "small",
442    srcs = ["bit_gen_ref_test.cc"],
443    copts = ABSL_TEST_COPTS,
444    linkopts = ABSL_DEFAULT_LINKOPTS,
445    deps = [
446        ":bit_gen_ref",
447        ":random",
448        "//absl/base:fast_type_id",
449        "//absl/random/internal:sequence_urbg",
450        "@com_google_googletest//:gtest",
451        "@com_google_googletest//:gtest_main",
452    ],
453)
454
455cc_test(
456    name = "mocking_bit_gen_test",
457    size = "small",
458    srcs = ["mocking_bit_gen_test.cc"],
459    copts = ABSL_TEST_COPTS,
460    linkopts = ABSL_DEFAULT_LINKOPTS,
461    tags = [
462        "no_test_wasm",
463    ],
464    deps = [
465        ":bit_gen_ref",
466        ":mock_distributions",
467        ":mocking_bit_gen",
468        ":random",
469        "@com_google_googletest//:gtest",
470        "@com_google_googletest//:gtest_main",
471    ],
472)
473
474cc_test(
475    name = "mock_distributions_test",
476    size = "small",
477    srcs = ["mock_distributions_test.cc"],
478    copts = ABSL_TEST_COPTS,
479    linkopts = ABSL_DEFAULT_LINKOPTS,
480    tags = [
481        "no_test_wasm",
482    ],
483    deps = [
484        ":mock_distributions",
485        ":mocking_bit_gen",
486        ":random",
487        "@com_google_googletest//:gtest",
488        "@com_google_googletest//:gtest_main",
489    ],
490)
491
492cc_test(
493    name = "examples_test",
494    size = "small",
495    srcs = ["examples_test.cc"],
496    copts = ABSL_TEST_COPTS,
497    linkopts = ABSL_DEFAULT_LINKOPTS,
498    tags = [
499        "no_test_wasm",
500    ],
501    deps = [
502        ":random",
503        "@com_google_googletest//:gtest",
504        "@com_google_googletest//:gtest_main",
505    ],
506)
507
508cc_test(
509    name = "seed_sequences_test",
510    size = "small",
511    srcs = ["seed_sequences_test.cc"],
512    copts = ABSL_TEST_COPTS,
513    linkopts = ABSL_DEFAULT_LINKOPTS,
514    deps = [
515        ":random",
516        ":seed_sequences",
517        "//absl/random/internal:nonsecure_base",
518        "@com_google_googletest//:gtest",
519        "@com_google_googletest//:gtest_main",
520    ],
521)
522
523# Benchmarks for various methods / test utilities
524cc_binary(
525    name = "benchmarks",
526    testonly = True,
527    srcs = [
528        "benchmarks.cc",
529    ],
530    copts = ABSL_TEST_COPTS,
531    linkopts = ABSL_DEFAULT_LINKOPTS,
532    tags = ["benchmark"],
533    deps = [
534        ":distributions",
535        ":random",
536        ":seed_sequences",
537        "//absl/base:core_headers",
538        "//absl/meta:type_traits",
539        "//absl/random/internal:fast_uniform_bits",
540        "//absl/random/internal:randen_engine",
541        "@com_github_google_benchmark//:benchmark_main",
542    ],
543)
544