• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/random/internal:pool_urbg",
112        "//absl/random/internal:salted_seed_seq",
113        "//absl/random/internal:seed_material",
114        "//absl/types:span",
115    ],
116)
117
118cc_library(
119    name = "bit_gen_ref",
120    hdrs = ["bit_gen_ref.h"],
121    copts = ABSL_DEFAULT_COPTS,
122    linkopts = ABSL_DEFAULT_LINKOPTS,
123    deps = [
124        ":random",
125        "//absl/base:core_headers",
126        "//absl/base:fast_type_id",
127        "//absl/meta:type_traits",
128        "//absl/random/internal:distribution_caller",
129        "//absl/random/internal:fast_uniform_bits",
130    ],
131)
132
133cc_library(
134    name = "mock_distributions",
135    testonly = 1,
136    hdrs = ["mock_distributions.h"],
137    linkopts = ABSL_DEFAULT_LINKOPTS,
138    deps = [
139        ":distributions",
140        ":mocking_bit_gen",
141        "//absl/meta:type_traits",
142        "//absl/random/internal:mock_overload_set",
143        "@com_google_googletest//:gtest",
144    ],
145)
146
147cc_library(
148    name = "mocking_bit_gen",
149    testonly = 1,
150    hdrs = [
151        "mocking_bit_gen.h",
152    ],
153    linkopts = ABSL_DEFAULT_LINKOPTS,
154    deps = [
155        ":distributions",
156        ":random",
157        "//absl/base:fast_type_id",
158        "//absl/container:flat_hash_map",
159        "//absl/meta:type_traits",
160        "//absl/random/internal:distribution_caller",
161        "//absl/strings",
162        "//absl/types:span",
163        "//absl/types:variant",
164        "//absl/utility",
165        "@com_google_googletest//:gtest",
166    ],
167)
168
169cc_test(
170    name = "bernoulli_distribution_test",
171    size = "small",
172    timeout = "eternal",  # Android can take a very long time
173    srcs = ["bernoulli_distribution_test.cc"],
174    copts = ABSL_TEST_COPTS,
175    linkopts = ABSL_DEFAULT_LINKOPTS,
176    deps = [
177        ":distributions",
178        ":random",
179        "//absl/random/internal:pcg_engine",
180        "//absl/random/internal:sequence_urbg",
181        "@com_google_googletest//:gtest",
182        "@com_google_googletest//:gtest_main",
183    ],
184)
185
186cc_test(
187    name = "beta_distribution_test",
188    size = "small",
189    timeout = "eternal",  # Android can take a very long time
190    srcs = ["beta_distribution_test.cc"],
191    copts = ABSL_TEST_COPTS,
192    flaky = 1,
193    linkopts = ABSL_DEFAULT_LINKOPTS,
194    tags = [
195        "no_test_wasm",
196    ],
197    deps = [
198        ":distributions",
199        ":random",
200        "//absl/log",
201        "//absl/numeric:representation",
202        "//absl/random/internal:distribution_test_util",
203        "//absl/random/internal:pcg_engine",
204        "//absl/random/internal:sequence_urbg",
205        "//absl/strings",
206        "//absl/strings:str_format",
207        "@com_google_googletest//:gtest",
208        "@com_google_googletest//:gtest_main",
209    ],
210)
211
212cc_test(
213    name = "distributions_test",
214    size = "small",
215    timeout = "moderate",
216    srcs = [
217        "distributions_test.cc",
218    ],
219    copts = ABSL_TEST_COPTS,
220    linkopts = ABSL_DEFAULT_LINKOPTS,
221    deps = [
222        ":distributions",
223        ":random",
224        "//absl/random/internal:distribution_test_util",
225        "@com_google_googletest//:gtest",
226        "@com_google_googletest//:gtest_main",
227    ],
228)
229
230cc_test(
231    name = "generators_test",
232    size = "small",
233    srcs = ["generators_test.cc"],
234    copts = ABSL_TEST_COPTS,
235    linkopts = ABSL_DEFAULT_LINKOPTS,
236    deps = [
237        ":distributions",
238        ":random",
239        "@com_google_googletest//:gtest",
240        "@com_google_googletest//:gtest_main",
241    ],
242)
243
244cc_test(
245    name = "log_uniform_int_distribution_test",
246    size = "medium",
247    srcs = [
248        "log_uniform_int_distribution_test.cc",
249    ],
250    copts = ABSL_TEST_COPTS,
251    linkopts = ABSL_DEFAULT_LINKOPTS,
252    tags = [
253        "no_test_wasm",  # Does not converge on WASM.
254    ],
255    deps = [
256        ":distributions",
257        ":random",
258        "//absl/log",
259        "//absl/random/internal:distribution_test_util",
260        "//absl/random/internal:pcg_engine",
261        "//absl/random/internal:sequence_urbg",
262        "//absl/strings",
263        "//absl/strings:str_format",
264        "@com_google_googletest//:gtest",
265        "@com_google_googletest//:gtest_main",
266    ],
267)
268
269cc_test(
270    name = "discrete_distribution_test",
271    size = "medium",
272    srcs = [
273        "discrete_distribution_test.cc",
274    ],
275    copts = ABSL_TEST_COPTS,
276    linkopts = ABSL_DEFAULT_LINKOPTS,
277    deps = [
278        ":distributions",
279        ":random",
280        "//absl/log",
281        "//absl/random/internal:distribution_test_util",
282        "//absl/random/internal:pcg_engine",
283        "//absl/random/internal:sequence_urbg",
284        "//absl/strings",
285        "@com_google_googletest//:gtest",
286        "@com_google_googletest//:gtest_main",
287    ],
288)
289
290cc_test(
291    name = "poisson_distribution_test",
292    size = "small",
293    timeout = "eternal",  # Android can take a very long time
294    srcs = [
295        "poisson_distribution_test.cc",
296    ],
297    copts = ABSL_TEST_COPTS,
298    linkopts = ABSL_DEFAULT_LINKOPTS,
299    tags = [
300        # Too Slow.
301        "no_test_android_arm",
302        "no_test_loonix",
303    ],
304    deps = [
305        ":distributions",
306        ":random",
307        "//absl/base:core_headers",
308        "//absl/container:flat_hash_map",
309        "//absl/log",
310        "//absl/random/internal:distribution_test_util",
311        "//absl/random/internal:pcg_engine",
312        "//absl/random/internal:sequence_urbg",
313        "//absl/strings",
314        "//absl/strings:str_format",
315        "@com_google_googletest//:gtest",
316        "@com_google_googletest//:gtest_main",
317    ],
318)
319
320cc_test(
321    name = "exponential_distribution_test",
322    size = "small",
323    timeout = "moderate",
324    srcs = ["exponential_distribution_test.cc"],
325    copts = ABSL_TEST_COPTS,
326    linkopts = ABSL_DEFAULT_LINKOPTS,
327    deps = [
328        ":distributions",
329        ":random",
330        "//absl/base:core_headers",
331        "//absl/log",
332        "//absl/numeric:representation",
333        "//absl/random/internal:distribution_test_util",
334        "//absl/random/internal:pcg_engine",
335        "//absl/random/internal:sequence_urbg",
336        "//absl/strings",
337        "//absl/strings:str_format",
338        "@com_google_googletest//:gtest",
339        "@com_google_googletest//:gtest_main",
340    ],
341)
342
343cc_test(
344    name = "gaussian_distribution_test",
345    size = "small",
346    timeout = "eternal",  # Android can take a very long time
347    srcs = [
348        "gaussian_distribution_test.cc",
349    ],
350    copts = ABSL_TEST_COPTS,
351    linkopts = ABSL_DEFAULT_LINKOPTS,
352    deps = [
353        ":distributions",
354        ":random",
355        "//absl/base:core_headers",
356        "//absl/log",
357        "//absl/numeric:representation",
358        "//absl/random/internal:distribution_test_util",
359        "//absl/random/internal:sequence_urbg",
360        "//absl/strings",
361        "//absl/strings:str_format",
362        "@com_google_googletest//:gtest",
363        "@com_google_googletest//:gtest_main",
364    ],
365)
366
367cc_test(
368    name = "uniform_int_distribution_test",
369    size = "medium",
370    timeout = "long",
371    srcs = [
372        "uniform_int_distribution_test.cc",
373    ],
374    copts = ABSL_TEST_COPTS,
375    linkopts = ABSL_DEFAULT_LINKOPTS,
376    deps = [
377        ":distributions",
378        ":random",
379        "//absl/log",
380        "//absl/random/internal:distribution_test_util",
381        "//absl/random/internal:pcg_engine",
382        "//absl/random/internal:sequence_urbg",
383        "//absl/strings",
384        "@com_google_googletest//:gtest",
385        "@com_google_googletest//:gtest_main",
386    ],
387)
388
389cc_test(
390    name = "uniform_real_distribution_test",
391    size = "medium",
392    srcs = [
393        "uniform_real_distribution_test.cc",
394    ],
395    copts = ABSL_TEST_COPTS,
396    linkopts = ABSL_DEFAULT_LINKOPTS,
397    tags = [
398        "no_test_android_arm",
399        "no_test_android_arm64",
400        "no_test_android_x86",
401    ],
402    deps = [
403        ":distributions",
404        ":random",
405        "//absl/log",
406        "//absl/numeric:representation",
407        "//absl/random/internal:distribution_test_util",
408        "//absl/random/internal:pcg_engine",
409        "//absl/random/internal:sequence_urbg",
410        "//absl/strings",
411        "@com_google_googletest//:gtest",
412        "@com_google_googletest//:gtest_main",
413    ],
414)
415
416cc_test(
417    name = "zipf_distribution_test",
418    size = "medium",
419    srcs = [
420        "zipf_distribution_test.cc",
421    ],
422    copts = ABSL_TEST_COPTS,
423    linkopts = ABSL_DEFAULT_LINKOPTS,
424    deps = [
425        ":distributions",
426        ":random",
427        "//absl/log",
428        "//absl/random/internal:distribution_test_util",
429        "//absl/random/internal:pcg_engine",
430        "//absl/random/internal:sequence_urbg",
431        "//absl/strings",
432        "@com_google_googletest//:gtest",
433        "@com_google_googletest//:gtest_main",
434    ],
435)
436
437cc_test(
438    name = "bit_gen_ref_test",
439    size = "small",
440    srcs = ["bit_gen_ref_test.cc"],
441    copts = ABSL_TEST_COPTS,
442    linkopts = ABSL_DEFAULT_LINKOPTS,
443    deps = [
444        ":bit_gen_ref",
445        ":random",
446        "//absl/base:fast_type_id",
447        "//absl/random/internal:sequence_urbg",
448        "@com_google_googletest//:gtest",
449        "@com_google_googletest//:gtest_main",
450    ],
451)
452
453cc_test(
454    name = "mocking_bit_gen_test",
455    size = "small",
456    srcs = ["mocking_bit_gen_test.cc"],
457    copts = ABSL_TEST_COPTS,
458    linkopts = ABSL_DEFAULT_LINKOPTS,
459    tags = [
460        "no_test_wasm",
461    ],
462    deps = [
463        ":bit_gen_ref",
464        ":mock_distributions",
465        ":mocking_bit_gen",
466        ":random",
467        "@com_google_googletest//:gtest",
468        "@com_google_googletest//:gtest_main",
469    ],
470)
471
472cc_test(
473    name = "mock_distributions_test",
474    size = "small",
475    srcs = ["mock_distributions_test.cc"],
476    copts = ABSL_TEST_COPTS,
477    linkopts = ABSL_DEFAULT_LINKOPTS,
478    tags = [
479        "no_test_wasm",
480    ],
481    deps = [
482        ":mock_distributions",
483        ":mocking_bit_gen",
484        ":random",
485        "@com_google_googletest//:gtest",
486        "@com_google_googletest//:gtest_main",
487    ],
488)
489
490cc_test(
491    name = "examples_test",
492    size = "small",
493    srcs = ["examples_test.cc"],
494    copts = ABSL_TEST_COPTS,
495    linkopts = ABSL_DEFAULT_LINKOPTS,
496    tags = [
497        "no_test_wasm",
498    ],
499    deps = [
500        ":random",
501        "@com_google_googletest//:gtest",
502        "@com_google_googletest//:gtest_main",
503    ],
504)
505
506cc_test(
507    name = "seed_sequences_test",
508    size = "small",
509    srcs = ["seed_sequences_test.cc"],
510    copts = ABSL_TEST_COPTS,
511    linkopts = ABSL_DEFAULT_LINKOPTS,
512    deps = [
513        ":random",
514        ":seed_sequences",
515        "//absl/random/internal:nonsecure_base",
516        "@com_google_googletest//:gtest",
517        "@com_google_googletest//:gtest_main",
518    ],
519)
520
521# Benchmarks for various methods / test utilities
522cc_binary(
523    name = "benchmarks",
524    testonly = 1,
525    srcs = [
526        "benchmarks.cc",
527    ],
528    copts = ABSL_TEST_COPTS,
529    linkopts = ABSL_DEFAULT_LINKOPTS,
530    tags = ["benchmark"],
531    deps = [
532        ":distributions",
533        ":random",
534        ":seed_sequences",
535        "//absl/base:core_headers",
536        "//absl/meta:type_traits",
537        "//absl/random/internal:fast_uniform_bits",
538        "//absl/random/internal:randen_engine",
539        "@com_github_google_benchmark//:benchmark_main",
540    ],
541)
542