BUILD.bazel 13 KB

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