diff options
| author | Benoit Germain <benoit.germain@ubisoft.com> | 2025-04-18 10:26:19 +0200 |
|---|---|---|
| committer | Benoit Germain <benoit.germain@ubisoft.com> | 2025-04-18 10:26:19 +0200 |
| commit | 022e40cc71beda874d0bad2cec227e472d5dd4af (patch) | |
| tree | 7f0e03815217dd2e329a2ade1ed346247d5db884 /unit_tests | |
| parent | 1bff784b474261212a996ac9fc59389d53a69590 (diff) | |
| download | lanes-022e40cc71beda874d0bad2cec227e472d5dd4af.tar.gz lanes-022e40cc71beda874d0bad2cec227e472d5dd4af.tar.bz2 lanes-022e40cc71beda874d0bad2cec227e472d5dd4af.zip | |
New feature: Linda periodical cancellation checks
* lanes.linda() api change: takes all settings in a single table argument
* new linda creation argument wake_period
* new lanes.configure setting linda_wake_period
* adjusted all unit tests (one TODO test fails on purpose)
Diffstat (limited to 'unit_tests')
| -rw-r--r-- | unit_tests/embedded_tests.cpp | 4 | ||||
| -rw-r--r-- | unit_tests/init_and_shutdown.cpp | 533 | ||||
| -rw-r--r-- | unit_tests/linda_tests.cpp | 185 | ||||
| -rw-r--r-- | unit_tests/scripts/lane/tasking_cancelling.lua | 2 | ||||
| -rw-r--r-- | unit_tests/scripts/lane/tasking_comms_criss_cross.lua | 2 | ||||
| -rw-r--r-- | unit_tests/scripts/lane/tasking_communications.lua | 2 | ||||
| -rw-r--r-- | unit_tests/scripts/lane/tasking_send_receive_code.lua | 2 | ||||
| -rw-r--r-- | unit_tests/scripts/linda/multiple_keepers.lua | 6 | ||||
| -rw-r--r-- | unit_tests/scripts/linda/send_registered_userdata.lua | 2 |
9 files changed, 437 insertions, 301 deletions
diff --git a/unit_tests/embedded_tests.cpp b/unit_tests/embedded_tests.cpp index 0991a4c..a0a7bb2 100644 --- a/unit_tests/embedded_tests.cpp +++ b/unit_tests/embedded_tests.cpp | |||
| @@ -157,7 +157,7 @@ TEST_CASE("lanes.embedding.with default allocator") | |||
| 157 | // function with an upvalue | 157 | // function with an upvalue |
| 158 | std::string_view const _script{ | 158 | std::string_view const _script{ |
| 159 | " local lanes = require 'lanes'.configure{with_timers = false}" | 159 | " local lanes = require 'lanes'.configure{with_timers = false}" |
| 160 | " local l = lanes.linda'gleh'" | 160 | " local l = lanes.linda{name = 'gleh'}" |
| 161 | " local upvalue = 'oeauaoeuoeuaoeuaoeujaoefubycfjbycfybcfjybcfjybcfjbcf'" | 161 | " local upvalue = 'oeauaoeuoeuaoeuaoeujaoefubycfjbycfybcfjybcfjybcfjbcf'" |
| 162 | " local upvalued = function()" | 162 | " local upvalued = function()" |
| 163 | " return upvalue" | 163 | " return upvalue" |
| @@ -183,7 +183,7 @@ TEST_CASE("lanes.embedding.with default allocator") | |||
| 183 | // try to send io.open into a linda, which fails if io base library is not loaded | 183 | // try to send io.open into a linda, which fails if io base library is not loaded |
| 184 | std::string_view const _script{ | 184 | std::string_view const _script{ |
| 185 | " local lanes = require 'lanes'" | 185 | " local lanes = require 'lanes'" |
| 186 | " local l = lanes.linda'gleh'" | 186 | " local l = lanes.linda{name = 'gleh'}" |
| 187 | " l:set('yo', io.open)" | 187 | " l:set('yo', io.open)" |
| 188 | " return 'SUCCESS'" | 188 | " return 'SUCCESS'" |
| 189 | }; | 189 | }; |
diff --git a/unit_tests/init_and_shutdown.cpp b/unit_tests/init_and_shutdown.cpp index 384af43..bd72157 100644 --- a/unit_tests/init_and_shutdown.cpp +++ b/unit_tests/init_and_shutdown.cpp | |||
| @@ -289,6 +289,62 @@ TEST_CASE("lanes.configure.keepers_gc_threshold") | |||
| 289 | 289 | ||
| 290 | // ################################################################################################# | 290 | // ################################################################################################# |
| 291 | 291 | ||
| 292 | TEST_CASE("lanes.configure.linda_wake_period") | ||
| 293 | { | ||
| 294 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 295 | |||
| 296 | // linda_wake_period should be a number > 0, or 'never' | ||
| 297 | |||
| 298 | SECTION("linda_wake_period = <table>") | ||
| 299 | { | ||
| 300 | L.requireFailure("require 'lanes'.configure{linda_wake_period = {}}"); | ||
| 301 | } | ||
| 302 | |||
| 303 | // --------------------------------------------------------------------------------------------- | ||
| 304 | |||
| 305 | SECTION("linda_wake_period = <string>") | ||
| 306 | { | ||
| 307 | L.requireFailure("require 'lanes'.configure{linda_wake_period = 'gluh'}"); | ||
| 308 | } | ||
| 309 | |||
| 310 | // --------------------------------------------------------------------------------------------- | ||
| 311 | |||
| 312 | SECTION("linda_wake_period = 'never'") | ||
| 313 | { | ||
| 314 | L.requireSuccess("require 'lanes'.configure{linda_wake_period = 'never'}"); | ||
| 315 | } | ||
| 316 | |||
| 317 | // --------------------------------------------------------------------------------------------- | ||
| 318 | |||
| 319 | SECTION("linda_wake_period = <negative number>") | ||
| 320 | { | ||
| 321 | L.requireFailure("require 'lanes'.configure{linda_wake_period = -0.001}"); | ||
| 322 | } | ||
| 323 | |||
| 324 | // --------------------------------------------------------------------------------------------- | ||
| 325 | |||
| 326 | SECTION("linda_wake_period = 0") | ||
| 327 | { | ||
| 328 | L.requireFailure("require 'lanes'.configure{linda_wake_period = 0}"); | ||
| 329 | } | ||
| 330 | |||
| 331 | // --------------------------------------------------------------------------------------------- | ||
| 332 | |||
| 333 | SECTION("linda_wake_period = 0.0001s") | ||
| 334 | { | ||
| 335 | L.requireSuccess("require 'lanes'.configure{linda_wake_period = 0.0001}"); | ||
| 336 | } | ||
| 337 | |||
| 338 | // --------------------------------------------------------------------------------------------- | ||
| 339 | |||
| 340 | SECTION("linda_wake_period = 1e30") | ||
| 341 | { | ||
| 342 | L.requireSuccess("require 'lanes'.configure{linda_wake_period = 1e30}"); | ||
| 343 | } | ||
| 344 | } | ||
| 345 | |||
| 346 | // ################################################################################################# | ||
| 347 | |||
| 292 | TEST_CASE("lanes.configure.nb_user_keepers") | 348 | TEST_CASE("lanes.configure.nb_user_keepers") |
| 293 | { | 349 | { |
| 294 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | 350 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; |
| @@ -300,35 +356,35 @@ TEST_CASE("lanes.configure.nb_user_keepers") | |||
| 300 | L.requireFailure("require 'lanes'.configure{nb_user_keepers = {}}"); | 356 | L.requireFailure("require 'lanes'.configure{nb_user_keepers = {}}"); |
| 301 | } | 357 | } |
| 302 | 358 | ||
| 303 | // ----------------------------------------------------------------------------------------- | 359 | // --------------------------------------------------------------------------------------------- |
| 304 | 360 | ||
| 305 | SECTION("nb_user_keepers = <string>") | 361 | SECTION("nb_user_keepers = <string>") |
| 306 | { | 362 | { |
| 307 | L.requireFailure("require 'lanes'.configure{nb_user_keepers = 'gluh'}"); | 363 | L.requireFailure("require 'lanes'.configure{nb_user_keepers = 'gluh'}"); |
| 308 | } | 364 | } |
| 309 | 365 | ||
| 310 | // ----------------------------------------------------------------------------------------- | 366 | // --------------------------------------------------------------------------------------------- |
| 311 | 367 | ||
| 312 | SECTION("nb_user_keepers = -1") | 368 | SECTION("nb_user_keepers = -1") |
| 313 | { | 369 | { |
| 314 | L.requireFailure("require 'lanes'.configure{nb_user_keepers = -1}"); | 370 | L.requireFailure("require 'lanes'.configure{nb_user_keepers = -1}"); |
| 315 | } | 371 | } |
| 316 | 372 | ||
| 317 | // ----------------------------------------------------------------------------------------- | 373 | // --------------------------------------------------------------------------------------------- |
| 318 | 374 | ||
| 319 | SECTION("nb_user_keepers = 0") | 375 | SECTION("nb_user_keepers = 0") |
| 320 | { | 376 | { |
| 321 | L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 0}"); | 377 | L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 0}"); |
| 322 | } | 378 | } |
| 323 | 379 | ||
| 324 | // ----------------------------------------------------------------------------------------- | 380 | // --------------------------------------------------------------------------------------------- |
| 325 | 381 | ||
| 326 | SECTION("nb_user_keepers = 1") | 382 | SECTION("nb_user_keepers = 1") |
| 327 | { | 383 | { |
| 328 | L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 1}"); | 384 | L.requireSuccess("require 'lanes'.configure{nb_user_keepers = 1}"); |
| 329 | } | 385 | } |
| 330 | 386 | ||
| 331 | // ----------------------------------------------------------------------------------------- | 387 | // --------------------------------------------------------------------------------------------- |
| 332 | 388 | ||
| 333 | SECTION("nb_user_keepers = 100") | 389 | SECTION("nb_user_keepers = 100") |
| 334 | { | 390 | { |
| @@ -345,340 +401,355 @@ TEST_CASE("lanes.configure.nb_user_keepers") | |||
| 345 | 401 | ||
| 346 | // ################################################################################################# | 402 | // ################################################################################################# |
| 347 | 403 | ||
| 348 | TEST_CASE("lanes.configure.the rest") | 404 | TEST_CASE("lanes.configure.on_state_create") |
| 349 | { | 405 | { |
| 350 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | 406 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; |
| 351 | 407 | ||
| 352 | // on_state_create should be a function, either C or Lua, without upvalues | 408 | // on_state_create should be a function, either C or Lua, without upvalues |
| 353 | 409 | ||
| 354 | SECTION("on_state_create") | 410 | SECTION("on_state_create = <table>") |
| 355 | { | 411 | { |
| 356 | SECTION("on_state_create = <table>") | 412 | L.requireFailure("require 'lanes'.configure{on_state_create = {}}"); |
| 357 | { | 413 | } |
| 358 | L.requireFailure("require 'lanes'.configure{on_state_create = {}}"); | ||
| 359 | } | ||
| 360 | 414 | ||
| 361 | // ----------------------------------------------------------------------------------------- | 415 | // --------------------------------------------------------------------------------------------- |
| 362 | 416 | ||
| 363 | SECTION("on_state_create = <string>") | 417 | SECTION("on_state_create = <string>") |
| 364 | { | 418 | { |
| 365 | L.requireFailure("require 'lanes'.configure{on_state_create = 'gluh'}"); | 419 | L.requireFailure("require 'lanes'.configure{on_state_create = 'gluh'}"); |
| 366 | } | 420 | } |
| 367 | 421 | ||
| 368 | // ----------------------------------------------------------------------------------------- | 422 | // --------------------------------------------------------------------------------------------- |
| 369 | 423 | ||
| 370 | SECTION("on_state_create = <number>") | 424 | SECTION("on_state_create = <number>") |
| 371 | { | 425 | { |
| 372 | L.requireFailure("require 'lanes'.configure{on_state_create = 1}"); | 426 | L.requireFailure("require 'lanes'.configure{on_state_create = 1}"); |
| 373 | } | 427 | } |
| 374 | 428 | ||
| 375 | // ----------------------------------------------------------------------------------------- | 429 | // --------------------------------------------------------------------------------------------- |
| 376 | 430 | ||
| 377 | SECTION("on_state_create = false") | 431 | SECTION("on_state_create = false") |
| 378 | { | 432 | { |
| 379 | L.requireFailure("require 'lanes'.configure{on_state_create = false}"); | 433 | L.requireFailure("require 'lanes'.configure{on_state_create = false}"); |
| 380 | } | 434 | } |
| 381 | 435 | ||
| 382 | // ----------------------------------------------------------------------------------------- | 436 | // --------------------------------------------------------------------------------------------- |
| 383 | 437 | ||
| 384 | SECTION("on_state_create = true") | 438 | SECTION("on_state_create = true") |
| 385 | { | 439 | { |
| 386 | L.requireFailure("require 'lanes'.configure{on_state_create = true}"); | 440 | L.requireFailure("require 'lanes'.configure{on_state_create = true}"); |
| 387 | } | 441 | } |
| 388 | 442 | ||
| 389 | // ----------------------------------------------------------------------------------------- | 443 | // --------------------------------------------------------------------------------------------- |
| 390 | 444 | ||
| 391 | SECTION("on_state_create = <Lua function>") | 445 | SECTION("on_state_create = <Lua function>") |
| 392 | { | 446 | { |
| 393 | // on_state_create isn't called inside a Keeper state if it's a Lua function (which is good as print() doesn't exist there!) | 447 | // on_state_create isn't called inside a Keeper state if it's a Lua function (which is good as print() doesn't exist there!) |
| 394 | L.requireSuccess("local print = print; require 'lanes'.configure{on_state_create = function() print 'hello' end}"); | 448 | L.requireSuccess("local print = print; require 'lanes'.configure{on_state_create = function() print 'hello' end}"); |
| 395 | } | 449 | } |
| 396 | 450 | ||
| 397 | // ----------------------------------------------------------------------------------------- | 451 | // --------------------------------------------------------------------------------------------- |
| 398 | 452 | ||
| 399 | SECTION("on_state_create = <C function>") | 453 | SECTION("on_state_create = <C function>") |
| 400 | { | 454 | { |
| 401 | // funnily enough, in Lua 5.3, print() uses global tostring(), that doesn't exist in a keeper since we didn't open libs -> "attempt to call a nil value" | 455 | // funnily enough, in Lua 5.3, print() uses global tostring(), that doesn't exist in a keeper since we didn't open libs -> "attempt to call a nil value" |
| 402 | // conclusion, don't use print() as a fake on_state_create() callback! | 456 | // conclusion, don't use print() as a fake on_state_create() callback! |
| 403 | // assert() should be fine since we pass a non-false argument to on_state_create | 457 | // assert() should be fine since we pass a non-false argument to on_state_create |
| 404 | L.requireSuccess("require 'lanes'.configure{on_state_create = assert}"); | 458 | L.requireSuccess("require 'lanes'.configure{on_state_create = assert}"); |
| 405 | } | ||
| 406 | } | 459 | } |
| 460 | } | ||
| 461 | |||
| 462 | // ################################################################################################# | ||
| 463 | |||
| 464 | TEST_CASE("lanes.configure.shutdown_timeout") | ||
| 465 | { | ||
| 466 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 407 | 467 | ||
| 408 | // --------------------------------------------------------------------------------------------- | ||
| 409 | // shutdown_timeout should be a number in [0,3600] | 468 | // shutdown_timeout should be a number in [0,3600] |
| 410 | 469 | ||
| 411 | SECTION("shutdown_timeout") | 470 | SECTION("shutdown_timeout = <table>") |
| 412 | { | 471 | { |
| 413 | SECTION("shutdown_timeout = <table>") | 472 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = {}}"); |
| 414 | { | 473 | } |
| 415 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = {}}"); | ||
| 416 | } | ||
| 417 | 474 | ||
| 418 | // ----------------------------------------------------------------------------------------- | 475 | // --------------------------------------------------------------------------------------------- |
| 419 | 476 | ||
| 420 | SECTION("shutdown_timeout = <string>") | 477 | SECTION("shutdown_timeout = <string>") |
| 421 | { | 478 | { |
| 422 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = 'gluh'}"); | 479 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = 'gluh'}"); |
| 423 | } | 480 | } |
| 424 | 481 | ||
| 425 | // ----------------------------------------------------------------------------------------- | 482 | // --------------------------------------------------------------------------------------------- |
| 426 | 483 | ||
| 427 | SECTION("shutdown_timeout = <negative number>") | 484 | SECTION("shutdown_timeout = <negative number>") |
| 428 | { | 485 | { |
| 429 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = -0.001}"); | 486 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = -0.001}"); |
| 430 | } | 487 | } |
| 431 | 488 | ||
| 432 | // ----------------------------------------------------------------------------------------- | 489 | // --------------------------------------------------------------------------------------------- |
| 433 | 490 | ||
| 434 | SECTION("shutdown_timeout = 0") | 491 | SECTION("shutdown_timeout = 0") |
| 435 | { | 492 | { |
| 436 | L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 0}"); | 493 | L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 0}"); |
| 437 | } | 494 | } |
| 438 | 495 | ||
| 439 | // ----------------------------------------------------------------------------------------- | 496 | // --------------------------------------------------------------------------------------------- |
| 440 | 497 | ||
| 441 | SECTION("shutdown_timeout = 1s") | 498 | SECTION("shutdown_timeout = 1s") |
| 442 | { | 499 | { |
| 443 | L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 1}"); | 500 | L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 1}"); |
| 444 | } | 501 | } |
| 445 | 502 | ||
| 446 | // ----------------------------------------------------------------------------------------- | 503 | // --------------------------------------------------------------------------------------------- |
| 447 | 504 | ||
| 448 | SECTION("shutdown_timeout = 3600s") | 505 | SECTION("shutdown_timeout = 3600s") |
| 449 | { | 506 | { |
| 450 | L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 3600}"); | 507 | L.requireSuccess("require 'lanes'.configure{shutdown_timeout = 3600}"); |
| 451 | } | 508 | } |
| 452 | 509 | ||
| 453 | // ----------------------------------------------------------------------------------------- | 510 | // --------------------------------------------------------------------------------------------- |
| 454 | 511 | ||
| 455 | SECTION("shutdown_timeout = <too long>") | 512 | SECTION("shutdown_timeout = <too long>") |
| 456 | { | 513 | { |
| 457 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = 3600.001}"); | 514 | L.requireFailure("require 'lanes'.configure{shutdown_timeout = 3600.001}"); |
| 458 | } | ||
| 459 | } | 515 | } |
| 516 | } | ||
| 517 | |||
| 518 | // ################################################################################################# | ||
| 519 | |||
| 520 | TEST_CASE("lanes.configure.strip_functions") | ||
| 521 | { | ||
| 522 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 460 | 523 | ||
| 461 | // --------------------------------------------------------------------------------------------- | ||
| 462 | // strip_functions should be a boolean | 524 | // strip_functions should be a boolean |
| 463 | 525 | ||
| 464 | SECTION("strip_functions") | 526 | SECTION("strip_functions = <table>") |
| 465 | { | 527 | { |
| 466 | SECTION("strip_functions = <table>") | 528 | L.requireFailure("require 'lanes'.configure{strip_functions = {}}"); |
| 467 | { | 529 | } |
| 468 | L.requireFailure("require 'lanes'.configure{strip_functions = {}}"); | ||
| 469 | } | ||
| 470 | 530 | ||
| 471 | // ----------------------------------------------------------------------------------------- | 531 | // --------------------------------------------------------------------------------------------- |
| 472 | 532 | ||
| 473 | SECTION("strip_functions = <string>") | 533 | SECTION("strip_functions = <string>") |
| 474 | { | 534 | { |
| 475 | L.requireFailure("require 'lanes'.configure{strip_functions = 'gluh'}"); | 535 | L.requireFailure("require 'lanes'.configure{strip_functions = 'gluh'}"); |
| 476 | } | 536 | } |
| 477 | 537 | ||
| 478 | // ----------------------------------------------------------------------------------------- | 538 | // --------------------------------------------------------------------------------------------- |
| 479 | 539 | ||
| 480 | SECTION("strip_functions = <number>") | 540 | SECTION("strip_functions = <number>") |
| 481 | { | 541 | { |
| 482 | L.requireFailure("require 'lanes'.configure{strip_functions = 1}"); | 542 | L.requireFailure("require 'lanes'.configure{strip_functions = 1}"); |
| 483 | } | 543 | } |
| 484 | 544 | ||
| 485 | // ----------------------------------------------------------------------------------------- | 545 | // --------------------------------------------------------------------------------------------- |
| 486 | 546 | ||
| 487 | SECTION("strip_functions = <C function>") | 547 | SECTION("strip_functions = <C function>") |
| 488 | { | 548 | { |
| 489 | L.requireFailure("require 'lanes'.configure{strip_functions = print}"); | 549 | L.requireFailure("require 'lanes'.configure{strip_functions = print}"); |
| 490 | } | 550 | } |
| 491 | 551 | ||
| 492 | // ----------------------------------------------------------------------------------------- | 552 | // --------------------------------------------------------------------------------------------- |
| 493 | 553 | ||
| 494 | SECTION("strip_functions = false") | 554 | SECTION("strip_functions = false") |
| 495 | { | 555 | { |
| 496 | L.requireSuccess("require 'lanes'.configure{strip_functions = false}"); | 556 | L.requireSuccess("require 'lanes'.configure{strip_functions = false}"); |
| 497 | } | 557 | } |
| 498 | 558 | ||
| 499 | // ----------------------------------------------------------------------------------------- | 559 | // --------------------------------------------------------------------------------------------- |
| 500 | 560 | ||
| 501 | SECTION("strip_functions = true") | 561 | SECTION("strip_functions = true") |
| 502 | { | 562 | { |
| 503 | L.requireSuccess("require 'lanes'.configure{strip_functions = true}"); | 563 | L.requireSuccess("require 'lanes'.configure{strip_functions = true}"); |
| 504 | } | ||
| 505 | } | 564 | } |
| 565 | } | ||
| 566 | |||
| 567 | // ################################################################################################# | ||
| 568 | |||
| 569 | TEST_CASE("lanes.configure.track_lanes") | ||
| 570 | { | ||
| 571 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 506 | 572 | ||
| 507 | // --------------------------------------------------------------------------------------------- | ||
| 508 | // track_lanes should be a boolean | 573 | // track_lanes should be a boolean |
| 509 | 574 | ||
| 510 | SECTION("track_lanes") | 575 | SECTION("track_lanes = <table>") |
| 511 | { | 576 | { |
| 512 | SECTION("track_lanes = <table>") | 577 | L.requireFailure("require 'lanes'.configure{track_lanes = {}}"); |
| 513 | { | 578 | } |
| 514 | L.requireFailure("require 'lanes'.configure{track_lanes = {}}"); | ||
| 515 | } | ||
| 516 | 579 | ||
| 517 | // ----------------------------------------------------------------------------------------- | 580 | // --------------------------------------------------------------------------------------------- |
| 518 | 581 | ||
| 519 | SECTION("track_lanes = <string>") | 582 | SECTION("track_lanes = <string>") |
| 520 | { | 583 | { |
| 521 | L.requireFailure("require 'lanes'.configure{track_lanes = 'gluh'}"); | 584 | L.requireFailure("require 'lanes'.configure{track_lanes = 'gluh'}"); |
| 522 | } | 585 | } |
| 523 | 586 | ||
| 524 | // ----------------------------------------------------------------------------------------- | 587 | // --------------------------------------------------------------------------------------------- |
| 525 | 588 | ||
| 526 | SECTION("track_lanes = <number>") | 589 | SECTION("track_lanes = <number>") |
| 527 | { | 590 | { |
| 528 | L.requireFailure("require 'lanes'.configure{track_lanes = 1}"); | 591 | L.requireFailure("require 'lanes'.configure{track_lanes = 1}"); |
| 529 | } | 592 | } |
| 530 | 593 | ||
| 531 | // ----------------------------------------------------------------------------------------- | 594 | // --------------------------------------------------------------------------------------------- |
| 532 | 595 | ||
| 533 | SECTION("track_lanes = <C function>") | 596 | SECTION("track_lanes = <C function>") |
| 534 | { | 597 | { |
| 535 | L.requireFailure("require 'lanes'.configure{track_lanes = print}"); | 598 | L.requireFailure("require 'lanes'.configure{track_lanes = print}"); |
| 536 | } | 599 | } |
| 537 | 600 | ||
| 538 | // ----------------------------------------------------------------------------------------- | 601 | // --------------------------------------------------------------------------------------------- |
| 539 | 602 | ||
| 540 | SECTION("track_lanes = false") | 603 | SECTION("track_lanes = false") |
| 541 | { | 604 | { |
| 542 | L.requireSuccess("require 'lanes'.configure{track_lanes = false}"); | 605 | L.requireSuccess("require 'lanes'.configure{track_lanes = false}"); |
| 543 | } | 606 | } |
| 544 | 607 | ||
| 545 | // ----------------------------------------------------------------------------------------- | 608 | // --------------------------------------------------------------------------------------------- |
| 546 | 609 | ||
| 547 | SECTION("track_lanes = true") | 610 | SECTION("track_lanes = true") |
| 548 | { | 611 | { |
| 549 | L.requireSuccess("require 'lanes'.configure{track_lanes = true}"); | 612 | L.requireSuccess("require 'lanes'.configure{track_lanes = true}"); |
| 550 | } | ||
| 551 | } | 613 | } |
| 614 | } | ||
| 615 | |||
| 616 | // ################################################################################################# | ||
| 617 | |||
| 618 | TEST_CASE("lanes.configure.verbose_errors") | ||
| 619 | { | ||
| 620 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 552 | 621 | ||
| 553 | // --------------------------------------------------------------------------------------------- | ||
| 554 | // verbose_errors should be a boolean | 622 | // verbose_errors should be a boolean |
| 555 | 623 | ||
| 556 | SECTION("verbose_errors") | 624 | SECTION("verbose_errors = <table>") |
| 557 | { | 625 | { |
| 558 | SECTION("verbose_errors = <table>") | 626 | L.requireFailure("require 'lanes'.configure{verbose_errors = {}}"); |
| 559 | { | 627 | } |
| 560 | L.requireFailure("require 'lanes'.configure{verbose_errors = {}}"); | ||
| 561 | } | ||
| 562 | 628 | ||
| 563 | // ----------------------------------------------------------------------------------------- | 629 | // --------------------------------------------------------------------------------------------- |
| 564 | 630 | ||
| 565 | SECTION("verbose_errors = <string>") | 631 | SECTION("verbose_errors = <string>") |
| 566 | { | 632 | { |
| 567 | L.requireFailure("require 'lanes'.configure{verbose_errors = 'gluh'}"); | 633 | L.requireFailure("require 'lanes'.configure{verbose_errors = 'gluh'}"); |
| 568 | } | 634 | } |
| 569 | 635 | ||
| 570 | // ----------------------------------------------------------------------------------------- | 636 | // --------------------------------------------------------------------------------------------- |
| 571 | 637 | ||
| 572 | SECTION("verbose_errors = <number>") | 638 | SECTION("verbose_errors = <number>") |
| 573 | { | 639 | { |
| 574 | L.requireFailure("require 'lanes'.configure{verbose_errors = 1}"); | 640 | L.requireFailure("require 'lanes'.configure{verbose_errors = 1}"); |
| 575 | } | 641 | } |
| 576 | 642 | ||
| 577 | // ----------------------------------------------------------------------------------------- | 643 | // --------------------------------------------------------------------------------------------- |
| 578 | 644 | ||
| 579 | SECTION("verbose_errors = <C function>") | 645 | SECTION("verbose_errors = <C function>") |
| 580 | { | 646 | { |
| 581 | L.requireFailure("require 'lanes'.configure{verbose_errors = print}"); | 647 | L.requireFailure("require 'lanes'.configure{verbose_errors = print}"); |
| 582 | } | 648 | } |
| 583 | 649 | ||
| 584 | // ----------------------------------------------------------------------------------------- | 650 | // --------------------------------------------------------------------------------------------- |
| 585 | 651 | ||
| 586 | SECTION("verbose_errors = false") | 652 | SECTION("verbose_errors = false") |
| 587 | { | 653 | { |
| 588 | L.requireSuccess("require 'lanes'.configure{verbose_errors = false}"); | 654 | L.requireSuccess("require 'lanes'.configure{verbose_errors = false}"); |
| 589 | } | 655 | } |
| 590 | 656 | ||
| 591 | // ----------------------------------------------------------------------------------------- | 657 | // --------------------------------------------------------------------------------------------- |
| 592 | 658 | ||
| 593 | SECTION("verbose_errors = true") | 659 | SECTION("verbose_errors = true") |
| 594 | { | 660 | { |
| 595 | L.requireSuccess("require 'lanes'.configure{verbose_errors = true}"); | 661 | L.requireSuccess("require 'lanes'.configure{verbose_errors = true}"); |
| 596 | } | ||
| 597 | } | 662 | } |
| 663 | } | ||
| 664 | |||
| 665 | // ################################################################################################# | ||
| 666 | |||
| 667 | TEST_CASE("lanes.configure.with_timers") | ||
| 668 | { | ||
| 669 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 598 | 670 | ||
| 599 | // --------------------------------------------------------------------------------------------- | ||
| 600 | // with_timers should be a boolean | 671 | // with_timers should be a boolean |
| 601 | 672 | ||
| 602 | SECTION("with_timers") | 673 | SECTION("with_timers = <table>") |
| 603 | { | 674 | { |
| 604 | SECTION("with_timers = <table>") | 675 | L.requireFailure("require 'lanes'.configure{with_timers = {}}"); |
| 605 | { | 676 | } |
| 606 | L.requireFailure("require 'lanes'.configure{with_timers = {}}"); | ||
| 607 | } | ||
| 608 | 677 | ||
| 609 | // ----------------------------------------------------------------------------------------- | 678 | // --------------------------------------------------------------------------------------------- |
| 610 | 679 | ||
| 611 | SECTION("with_timers = <string>") | 680 | SECTION("with_timers = <string>") |
| 612 | { | 681 | { |
| 613 | L.requireFailure("require 'lanes'.configure{with_timers = 'gluh'}"); | 682 | L.requireFailure("require 'lanes'.configure{with_timers = 'gluh'}"); |
| 614 | } | 683 | } |
| 615 | 684 | ||
| 616 | // ----------------------------------------------------------------------------------------- | 685 | // --------------------------------------------------------------------------------------------- |
| 617 | 686 | ||
| 618 | SECTION("with_timers = <number>") | 687 | SECTION("with_timers = <number>") |
| 619 | { | 688 | { |
| 620 | L.requireFailure("require 'lanes'.configure{with_timers = 1}"); | 689 | L.requireFailure("require 'lanes'.configure{with_timers = 1}"); |
| 621 | } | 690 | } |
| 622 | 691 | ||
| 623 | // ----------------------------------------------------------------------------------------- | 692 | // --------------------------------------------------------------------------------------------- |
| 624 | 693 | ||
| 625 | SECTION("with_timers = <C function>") | 694 | SECTION("with_timers = <C function>") |
| 626 | { | 695 | { |
| 627 | L.requireFailure("require 'lanes'.configure{with_timers = print}"); | 696 | L.requireFailure("require 'lanes'.configure{with_timers = print}"); |
| 628 | } | 697 | } |
| 629 | 698 | ||
| 630 | // ----------------------------------------------------------------------------------------- | 699 | // --------------------------------------------------------------------------------------------- |
| 631 | 700 | ||
| 632 | SECTION("with_timers = false") | 701 | SECTION("with_timers = false") |
| 633 | { | 702 | { |
| 634 | L.requireSuccess("require 'lanes'.configure{with_timers = false}"); | 703 | L.requireSuccess("require 'lanes'.configure{with_timers = false}"); |
| 635 | } | 704 | } |
| 636 | 705 | ||
| 637 | // ----------------------------------------------------------------------------------------- | 706 | // --------------------------------------------------------------------------------------------- |
| 638 | 707 | ||
| 639 | SECTION("with_timers = true") | 708 | SECTION("with_timers = true") |
| 640 | { | 709 | { |
| 641 | L.requireSuccess("require 'lanes'.configure{with_timers = true}"); | 710 | L.requireSuccess("require 'lanes'.configure{with_timers = true}"); |
| 642 | } | ||
| 643 | } | 711 | } |
| 712 | } | ||
| 713 | |||
| 714 | // ################################################################################################# | ||
| 715 | |||
| 716 | TEST_CASE("lanes.configure.unknown_setting") | ||
| 717 | { | ||
| 718 | LuaState L{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; | ||
| 644 | 719 | ||
| 645 | // --------------------------------------------------------------------------------------------- | ||
| 646 | // any unknown setting should be rejected | 720 | // any unknown setting should be rejected |
| 647 | 721 | ||
| 648 | SECTION("unknown_setting") | 722 | SECTION("table setting") |
| 649 | { | 723 | { |
| 650 | SECTION("table setting") | 724 | L.requireFailure("require 'lanes'.configure{[{}] = {}}"); |
| 651 | { | 725 | } |
| 652 | L.requireFailure("require 'lanes'.configure{[{}] = {}}"); | ||
| 653 | } | ||
| 654 | 726 | ||
| 655 | // ----------------------------------------------------------------------------------------- | 727 | // --------------------------------------------------------------------------------------------- |
| 656 | 728 | ||
| 657 | SECTION("boolean setting") | 729 | SECTION("boolean setting") |
| 658 | { | 730 | { |
| 659 | L.requireFailure("require 'lanes'.configure{[true] = 'gluh'}"); | 731 | L.requireFailure("require 'lanes'.configure{[true] = 'gluh'}"); |
| 660 | } | 732 | } |
| 661 | 733 | ||
| 662 | // ----------------------------------------------------------------------------------------- | 734 | // --------------------------------------------------------------------------------------------- |
| 663 | 735 | ||
| 664 | SECTION("function setting") | 736 | SECTION("function setting") |
| 665 | { | 737 | { |
| 666 | L.requireFailure("require 'lanes'.configure{[function() end] = 1}"); | 738 | L.requireFailure("require 'lanes'.configure{[function() end] = 1}"); |
| 667 | } | 739 | } |
| 668 | 740 | ||
| 669 | // ----------------------------------------------------------------------------------------- | 741 | // --------------------------------------------------------------------------------------------- |
| 670 | 742 | ||
| 671 | SECTION("number setting") | 743 | SECTION("number setting") |
| 672 | { | 744 | { |
| 673 | L.requireFailure("require 'lanes'.configure{[1] = function() end}"); | 745 | L.requireFailure("require 'lanes'.configure{[1] = function() end}"); |
| 674 | } | 746 | } |
| 675 | 747 | ||
| 676 | // ----------------------------------------------------------------------------------------- | 748 | // --------------------------------------------------------------------------------------------- |
| 677 | 749 | ||
| 678 | SECTION("unknown string setting") | 750 | SECTION("unknown string setting") |
| 679 | { | 751 | { |
| 680 | L.requireFailure("require 'lanes'.configure{['gluh'] = false}"); | 752 | L.requireFailure("require 'lanes'.configure{['gluh'] = false}"); |
| 681 | } | ||
| 682 | } | 753 | } |
| 683 | } | 754 | } |
| 684 | 755 | ||
diff --git a/unit_tests/linda_tests.cpp b/unit_tests/linda_tests.cpp index f2934eb..9dbaa85 100644 --- a/unit_tests/linda_tests.cpp +++ b/unit_tests/linda_tests.cpp | |||
| @@ -3,67 +3,132 @@ | |||
| 3 | 3 | ||
| 4 | // ################################################################################################# | 4 | // ################################################################################################# |
| 5 | 5 | ||
| 6 | TEST_CASE("linda.single Keeper") | 6 | TEST_CASE("linda.single_keeper.creation/no_argument") |
| 7 | { | 7 | { |
| 8 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | 8 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; |
| 9 | S.requireSuccess("lanes = require 'lanes'"); | 9 | S.requireSuccess("lanes = require 'lanes'"); |
| 10 | 10 | ||
| 11 | SECTION("Linda creation") | 11 | // no argument is ok |
| 12 | { | 12 | S.requireSuccess("lanes.linda()"); |
| 13 | // no parameters is ok | 13 | S.requireNotReturnedString("return tostring(lanes.linda())", R"===(Linda: <not a string>)==="); // unspecified name should not result in <not a string> |
| 14 | S.requireSuccess("lanes.linda()"); | 14 | } |
| 15 | S.requireNotReturnedString("return tostring(lanes.linda())", R"===(Linda: <not a string>)==="); // unspecified name should not result in <not a string> | ||
| 16 | |||
| 17 | // since we have only one keeper, only group 0 is authorized | ||
| 18 | S.requireFailure("lanes.linda(-1)"); | ||
| 19 | S.requireSuccess("lanes.linda(0)"); | ||
| 20 | S.requireFailure("lanes.linda(1)"); | ||
| 21 | |||
| 22 | // any name is ok | ||
| 23 | S.requireSuccess("lanes.linda('')"); // an empty name results in a string conversion of the form "Linda: <some hex value>" that we can't test (but it works) | ||
| 24 | S.requireReturnedString("return tostring(lanes.linda('short name'))", R"===(Linda: short name)==="); | ||
| 25 | S.requireReturnedString("return tostring(lanes.linda('very very very very very very long name'))", R"===(Linda: very very very very very very long name)==="); | ||
| 26 | S.requireReturnedString("return tostring(lanes.linda('auto'))", R"===(Linda: [string "return tostring(lanes.linda('auto'))"]:1)==="); | ||
| 27 | |||
| 28 | if constexpr (LUA_VERSION_NUM == 504) { | ||
| 29 | // a function is acceptable as a __close handler | ||
| 30 | S.requireSuccess("local l <close> = lanes.linda(function() end)"); | ||
| 31 | // a callable table too (a callable full userdata as well, but I have none here) | ||
| 32 | S.requireSuccess("local l <close> = lanes.linda(setmetatable({}, {__call = function() end}))"); | ||
| 33 | // if the function raises an error, we should get it | ||
| 34 | S.requireFailure("local l <close> = lanes.linda(function() error 'gluh' end)"); | ||
| 35 | } else { | ||
| 36 | // no __close support before Lua 5.4 | ||
| 37 | S.requireFailure("lanes.linda(function() end)"); | ||
| 38 | S.requireFailure("lanes.linda(setmetatable({}, {__call = function() end}))"); | ||
| 39 | } | ||
| 40 | 15 | ||
| 41 | // mixing parameters in any order is ok: 2 out of 3 | 16 | // ################################################################################################# |
| 42 | S.requireSuccess("lanes.linda(0, 'name')"); | ||
| 43 | S.requireSuccess("lanes.linda('name', 0)"); | ||
| 44 | if constexpr (LUA_VERSION_NUM == 504) { | ||
| 45 | S.requireSuccess("lanes.linda(0, function() end)"); | ||
| 46 | S.requireSuccess("lanes.linda(function() end, 0)"); | ||
| 47 | S.requireSuccess("lanes.linda('name', function() end)"); | ||
| 48 | S.requireSuccess("lanes.linda(function() end, 'name')"); | ||
| 49 | } | ||
| 50 | 17 | ||
| 51 | // mixing parameters in any order is ok: 3 out of 3 | 18 | TEST_CASE("linda.single_keeper.creation/non_table_arguments") |
| 52 | if constexpr (LUA_VERSION_NUM == 504) { | 19 | { |
| 53 | S.requireSuccess("lanes.linda(0, 'name', function() end)"); | 20 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; |
| 54 | S.requireSuccess("lanes.linda(0, function() end, 'name')"); | 21 | S.requireSuccess("lanes = require 'lanes'"); |
| 55 | S.requireSuccess("lanes.linda('name', 0, function() end)"); | 22 | |
| 56 | S.requireSuccess("lanes.linda('name', function() end, 0)"); | 23 | // any argument that is not a table is not ok |
| 57 | S.requireSuccess("lanes.linda(function() end, 0, 'name')"); | 24 | S.requireFailure("lanes.linda(0)"); |
| 58 | S.requireSuccess("lanes.linda(function() end, 'name', 0)"); | 25 | S.requireFailure("lanes.linda('bob')"); |
| 59 | } | 26 | S.requireFailure("lanes.linda(false)"); |
| 27 | S.requireFailure("lanes.linda(function() end)"); | ||
| 28 | S.requireFailure("lanes.linda(lanes.cancel_error)"); | ||
| 29 | } | ||
| 30 | |||
| 31 | // ################################################################################################# | ||
| 32 | |||
| 33 | TEST_CASE("linda.single_keeper.creation/close_handler") | ||
| 34 | { | ||
| 35 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | ||
| 36 | S.requireSuccess("lanes = require 'lanes'"); | ||
| 37 | |||
| 38 | if constexpr (LUA_VERSION_NUM == 504) { | ||
| 39 | // a function is acceptable as a __close handler | ||
| 40 | S.requireSuccess("local l <close> = lanes.linda{close_handler = function() end}"); | ||
| 41 | // a callable table too (a callable full userdata as well, but I have none here) | ||
| 42 | S.requireSuccess("local l <close> = lanes.linda{close_handler = setmetatable({}, {__call = function() end})}"); | ||
| 43 | } else { | ||
| 44 | // no __close support before Lua 5.4, field is ignored (therefore invalid values are accepted too!) | ||
| 45 | S.requireSuccess("lanes.linda{close_handler = 'a string'}"); | ||
| 46 | S.requireSuccess("lanes.linda{close_handler = function() end}"); | ||
| 47 | S.requireSuccess("lanes.linda{close_handler = setmetatable({}, {__call = function() end})}"); | ||
| 48 | } | ||
| 49 | } | ||
| 50 | |||
| 51 | // ################################################################################################# | ||
| 52 | |||
| 53 | TEST_CASE("linda.single_keeper.creation/table_argument") | ||
| 54 | { | ||
| 55 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | ||
| 56 | S.requireSuccess("lanes = require 'lanes'"); | ||
| 57 | |||
| 58 | // one table is fine | ||
| 59 | S.requireSuccess("lanes.linda{}"); | ||
| 60 | // anything beyond that is not | ||
| 61 | S.requireFailure("lanes.linda({},{})"); | ||
| 62 | S.requireFailure("lanes.linda({},'bob')"); | ||
| 63 | S.requireFailure("lanes.linda({},42)"); | ||
| 64 | } | ||
| 65 | |||
| 66 | // ################################################################################################# | ||
| 67 | |||
| 68 | TEST_CASE("linda.single_keeper.creation/group") | ||
| 69 | { | ||
| 70 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | ||
| 71 | S.requireSuccess("lanes = require 'lanes'"); | ||
| 72 | |||
| 73 | // since we have only one keeper, only group 0 is authorized | ||
| 74 | S.requireFailure("lanes.linda{group = -1}"); | ||
| 75 | S.requireSuccess("lanes.linda{group = 0}"); | ||
| 76 | S.requireFailure("lanes.linda{group = 1}"); | ||
| 77 | } | ||
| 78 | |||
| 79 | // ################################################################################################# | ||
| 80 | |||
| 81 | TEST_CASE("linda.single_keeper.creation/name") | ||
| 82 | { | ||
| 83 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | ||
| 84 | S.requireSuccess("lanes = require 'lanes'"); | ||
| 85 | |||
| 86 | // any name is ok | ||
| 87 | S.requireSuccess("lanes.linda{name = ''}"); // an empty name results in a string conversion of the form "Linda: <some hex value>" that we can't test (but it works) | ||
| 88 | S.requireReturnedString("return tostring(lanes.linda{name = 'short name'})", R"===(Linda: short name)==="); | ||
| 89 | S.requireReturnedString("return tostring(lanes.linda{name = 'very very very very very very long name'})", R"===(Linda: very very very very very very long name)==="); | ||
| 90 | S.requireReturnedString("return tostring(lanes.linda{name = 'auto'})", R"===(Linda: [string "return tostring(lanes.linda{name = 'auto'})"]:1)==="); | ||
| 91 | } | ||
| 92 | |||
| 93 | // ################################################################################################# | ||
| 94 | |||
| 95 | TEST_CASE("linda.single_keeper.creation/wake_period") | ||
| 96 | { | ||
| 97 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | ||
| 98 | S.requireSuccess("lanes = require 'lanes'"); | ||
| 60 | 99 | ||
| 61 | // unsupported parameters should fail | 100 | // wake_period should be a number > 0 |
| 62 | S.requireFailure("lanes.linda(true)"); | 101 | S.requireFailure("lanes.linda{wake_period = false}"); |
| 63 | S.requireFailure("lanes.linda(false)"); | 102 | S.requireFailure("lanes.linda{wake_period = 'bob'}"); |
| 64 | // uncallable table or full userdata | 103 | S.requireFailure("lanes.linda{wake_period = {}}"); |
| 65 | S.requireFailure("lanes.linda({})"); | 104 | S.requireFailure("lanes.linda{wake_period = -1}"); |
| 66 | S.requireFailure("lanes.linda(lanes.linda())"); | 105 | S.requireFailure("lanes.linda{wake_period = 0}"); |
| 106 | S.requireSuccess("lanes.linda{wake_period = 0.0001}"); | ||
| 107 | } | ||
| 108 | |||
| 109 | // ################################################################################################# | ||
| 110 | |||
| 111 | TEST_CASE("linda.single_keeper.wake_period") | ||
| 112 | { | ||
| 113 | FAIL("TODO: check that wake_period works as expected"); | ||
| 114 | // - use configure default if not provided | ||
| 115 | // - overrides default when provided | ||
| 116 | // - blocking operation wakes at the specified period | ||
| 117 | } | ||
| 118 | |||
| 119 | // ################################################################################################# | ||
| 120 | |||
| 121 | TEST_CASE("linda.single_keeper.the_rest") | ||
| 122 | { | ||
| 123 | LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ true } }; | ||
| 124 | S.requireSuccess("lanes = require 'lanes'"); | ||
| 125 | |||
| 126 | // --------------------------------------------------------------------------------------------- | ||
| 127 | |||
| 128 | SECTION("error in close handler is propagated") | ||
| 129 | { | ||
| 130 | // if the function raises an error, we should get it | ||
| 131 | S.requireFailure("local l <close> = lanes.linda{close_handler = function() error 'gluh' end}"); | ||
| 67 | } | 132 | } |
| 68 | 133 | ||
| 69 | // --------------------------------------------------------------------------------------------- | 134 | // --------------------------------------------------------------------------------------------- |
| @@ -311,12 +376,12 @@ TEST_CASE("linda.multi Keeper") | |||
| 311 | 376 | ||
| 312 | S.requireSuccess("lanes = require 'lanes'.configure{nb_user_keepers = 3}"); | 377 | S.requireSuccess("lanes = require 'lanes'.configure{nb_user_keepers = 3}"); |
| 313 | 378 | ||
| 314 | S.requireFailure("lanes.linda(-1)"); | 379 | S.requireFailure("lanes.linda{group = -1}"); |
| 315 | S.requireSuccess("lanes.linda(0)"); | 380 | S.requireSuccess("lanes.linda{group = 0}"); |
| 316 | S.requireSuccess("lanes.linda(1)"); | 381 | S.requireSuccess("lanes.linda{group = 1}"); |
| 317 | S.requireSuccess("lanes.linda(2)"); | 382 | S.requireSuccess("lanes.linda{group = 2}"); |
| 318 | S.requireSuccess("lanes.linda(3)"); | 383 | S.requireSuccess("lanes.linda{group = 3}"); |
| 319 | S.requireFailure("lanes.linda(4)"); | 384 | S.requireFailure("lanes.linda{group = 4}"); |
| 320 | } | 385 | } |
| 321 | 386 | ||
| 322 | // ################################################################################################# | 387 | // ################################################################################################# |
diff --git a/unit_tests/scripts/lane/tasking_cancelling.lua b/unit_tests/scripts/lane/tasking_cancelling.lua index ea4516e..873140e 100644 --- a/unit_tests/scripts/lane/tasking_cancelling.lua +++ b/unit_tests/scripts/lane/tasking_cancelling.lua | |||
| @@ -16,7 +16,7 @@ local lanes_linda = assert(lanes.linda) | |||
| 16 | -- ################################################################################################## | 16 | -- ################################################################################################## |
| 17 | 17 | ||
| 18 | -- cancellation of lanes waiting on a linda | 18 | -- cancellation of lanes waiting on a linda |
| 19 | local limited = lanes_linda("limited") | 19 | local limited = lanes_linda{name = "limited"} |
| 20 | assert.fails(function() limited:limit("key", -1) end) | 20 | assert.fails(function() limited:limit("key", -1) end) |
| 21 | assert.failsnot(function() limited:limit("key", 1) end) | 21 | assert.failsnot(function() limited:limit("key", 1) end) |
| 22 | -- [[################################################ | 22 | -- [[################################################ |
diff --git a/unit_tests/scripts/lane/tasking_comms_criss_cross.lua b/unit_tests/scripts/lane/tasking_comms_criss_cross.lua index 497e81d..610da8b 100644 --- a/unit_tests/scripts/lane/tasking_comms_criss_cross.lua +++ b/unit_tests/scripts/lane/tasking_comms_criss_cross.lua | |||
| @@ -42,7 +42,7 @@ local tc = lanes_gen("io", { name = 'auto', gc_cb = gc_cb }, | |||
| 42 | end | 42 | end |
| 43 | ) | 43 | ) |
| 44 | 44 | ||
| 45 | local linda= lanes_linda("criss cross") | 45 | local linda= lanes_linda{name = "criss cross"} |
| 46 | 46 | ||
| 47 | local a,b= tc(linda, "A","B"), tc(linda, "B","A") -- launching two lanes, twisted comms | 47 | local a,b= tc(linda, "A","B"), tc(linda, "B","A") -- launching two lanes, twisted comms |
| 48 | 48 | ||
diff --git a/unit_tests/scripts/lane/tasking_communications.lua b/unit_tests/scripts/lane/tasking_communications.lua index 631d105..01842b4 100644 --- a/unit_tests/scripts/lane/tasking_communications.lua +++ b/unit_tests/scripts/lane/tasking_communications.lua | |||
| @@ -72,7 +72,7 @@ local chunk= function(linda) | |||
| 72 | WR("chunk ", "Lane ends!\n") | 72 | WR("chunk ", "Lane ends!\n") |
| 73 | end | 73 | end |
| 74 | 74 | ||
| 75 | local linda = lanes_linda("communications") | 75 | local linda = lanes_linda{name = "communications"} |
| 76 | assert(type(linda) == "userdata" and tostring(linda) == "Linda: communications") | 76 | assert(type(linda) == "userdata" and tostring(linda) == "Linda: communications") |
| 77 | -- | 77 | -- |
| 78 | -- ["->"] master -> slave | 78 | -- ["->"] master -> slave |
diff --git a/unit_tests/scripts/lane/tasking_send_receive_code.lua b/unit_tests/scripts/lane/tasking_send_receive_code.lua index e329a88..cb3663f 100644 --- a/unit_tests/scripts/lane/tasking_send_receive_code.lua +++ b/unit_tests/scripts/lane/tasking_send_receive_code.lua | |||
| @@ -65,7 +65,7 @@ local function chunk2(linda) | |||
| 65 | linda:send("up", function() return ":)" end, "ok2") | 65 | linda:send("up", function() return ":)" end, "ok2") |
| 66 | end | 66 | end |
| 67 | 67 | ||
| 68 | local linda = lanes_linda("auto") | 68 | local linda = lanes_linda{name = "auto"} |
| 69 | local t2= lanes_gen("debug,package,string,io", { name = 'auto', gc_cb = gc_cb }, chunk2)(linda) -- prepare & launch | 69 | local t2= lanes_gen("debug,package,string,io", { name = 'auto', gc_cb = gc_cb }, chunk2)(linda) -- prepare & launch |
| 70 | linda:send("down", function(linda) linda:send("up", "ready!") end, | 70 | linda:send("down", function(linda) linda:send("up", "ready!") end, |
| 71 | "ok") | 71 | "ok") |
diff --git a/unit_tests/scripts/linda/multiple_keepers.lua b/unit_tests/scripts/linda/multiple_keepers.lua index 8733087..267d874 100644 --- a/unit_tests/scripts/linda/multiple_keepers.lua +++ b/unit_tests/scripts/linda/multiple_keepers.lua | |||
| @@ -2,9 +2,9 @@ | |||
| 2 | local require_lanes_result_1, require_lanes_result_2 = require "lanes".configure{nb_user_keepers = 3, keepers_gc_threshold = 500} | 2 | local require_lanes_result_1, require_lanes_result_2 = require "lanes".configure{nb_user_keepers = 3, keepers_gc_threshold = 500} |
| 3 | local lanes = require_lanes_result_1 | 3 | local lanes = require_lanes_result_1 |
| 4 | 4 | ||
| 5 | local a = lanes.linda("A", 1) | 5 | local a = lanes.linda{name = "A", group = 1} |
| 6 | local b = lanes.linda("B", 2) | 6 | local b = lanes.linda{name = "B", group = 2} |
| 7 | local c = lanes.linda("C", 3) | 7 | local c = lanes.linda{name = "C", group = 3} |
| 8 | 8 | ||
| 9 | -- store each linda in the other 2 | 9 | -- store each linda in the other 2 |
| 10 | do | 10 | do |
diff --git a/unit_tests/scripts/linda/send_registered_userdata.lua b/unit_tests/scripts/linda/send_registered_userdata.lua index 2c0195a..90c05c9 100644 --- a/unit_tests/scripts/linda/send_registered_userdata.lua +++ b/unit_tests/scripts/linda/send_registered_userdata.lua | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | local lanes = require 'lanes'.configure{with_timers = false} | 1 | local lanes = require 'lanes'.configure{with_timers = false} |
| 2 | local l = lanes.linda'gleh' | 2 | local l = lanes.linda{name = 'gleh'} |
| 3 | l:set('yo', io.stdin) | 3 | l:set('yo', io.stdin) |
| 4 | local n, stdin_out = l:get('yo') | 4 | local n, stdin_out = l:get('yo') |
| 5 | assert(n == 1 and stdin_out == io.stdin, tostring(stdin_out) .. " ~= " .. tostring(io.stdin)) | 5 | assert(n == 1 and stdin_out == io.stdin, tostring(stdin_out) .. " ~= " .. tostring(io.stdin)) |
