BUILD.bazel 14 KB

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