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