@@ -350,75 +350,53 @@ end
350
350
@test agent2. pos == (2 , 4 )
351
351
end
352
352
353
- @multiagent :opt_memory struct Animal {T,N,J} (GridAgent{2 })
354
- @subagent struct Wolf{T,N}
355
- energy:: T = 0.5
356
- ground_speed:: N
357
- const fur_color:: Symbol
358
- end
359
- @subagent struct Hawk{T,N,J}
360
- energy:: T = 0.1
361
- ground_speed:: N
362
- flight_speed:: J
363
- end
353
+ @agent struct Wolf {T,N} (GridAgent{2 })
354
+ energy:: T = 0.5
355
+ ground_speed:: N
356
+ const fur_color:: Symbol
364
357
end
365
358
366
- @multiagent :opt_speed struct A {T} (NoSpaceAgent)
367
- @subagent struct B{T}
368
- a:: T = 1
369
- b:: Int
370
- c:: Symbol
371
- end
372
- @subagent struct C
373
- b:: Int = 2
374
- c:: Symbol
375
- d:: Vector{Int}
376
- end
377
- @subagent struct D{T}
378
- c:: Symbol = :k
379
- d:: Vector{Int}
380
- a:: T
381
- end
359
+ @agent struct Hawk {T,N,J} (GridAgent{2 })
360
+ energy:: T = 0.1
361
+ ground_speed:: N
362
+ flight_speed:: J
382
363
end
383
364
384
- abstract type AbstractE <: AbstractAgent end
385
- @multiagent struct E (NoSpaceAgent) <: AbstractE
386
- @subagent struct F
387
- x:: Int
388
- end
389
- @subagent struct G
390
- y:: Int
391
- end
392
- end
365
+ @multiagent Animal (Wolf, Hawk)
393
366
394
- @multiagent :opt_speed struct MultiSchelling1 {X} (GridAgent{2 })
395
- @subagent struct Civilian1 # can't re-define existing `Schelling` name
396
- mood:: Bool = false
397
- group:: Int
398
- end
399
- @subagent struct Governor1{X<: Real } # can't redefine existing `Politician` name
400
- group:: Int
401
- influence:: X
402
- end
367
+ @agent struct B {T} (NoSpaceAgent)
368
+ a:: T = 1
369
+ b:: Int
370
+ c:: Symbol
403
371
end
372
+ @agent struct C (NoSpaceAgent)
373
+ b:: Int = 2
374
+ c:: Symbol
375
+ d:: Vector{Int}
376
+ end
377
+ @agent struct D {T} (NoSpaceAgent)
378
+ c:: Symbol = :k
379
+ d:: Vector{Int}
380
+ a:: T
381
+ end
382
+ @multiagent A (B,C,D)
404
383
405
- @multiagent :opt_memory struct MultiSchelling2 {X} (GridAgent{2 })
406
- @subagent struct Civilian2 # can't re-define existing `Schelling` name
407
- mood:: Bool = false
408
- group:: Int
409
- end
410
- @subagent struct Governor2{X<: Real } # can't redefine existing `Politician` name
411
- group:: Int
412
- influence:: X
413
- end
384
+ abstract type AbstractE <: AbstractAgent end
385
+
386
+ @agent struct F (NoSpaceAgent)
387
+ x:: Int
414
388
end
389
+ @agent struct G (NoSpaceAgent)
390
+ y:: Int
391
+ end
392
+ @multiagent E (F,G) <: AbstractE
415
393
416
394
@testset " @multiagent macro" begin
417
395
418
- hawk_1 = Hawk (1 , (1 , 1 ), 1.0 , 2.0 , 3 )
419
- hawk_2 = Hawk (; id = 2 , pos = (1 , 2 ), ground_speed = 2.3 , flight_speed = 2 )
420
- wolf_1 = Wolf (3 , (2 , 2 ), 2.0 , 3.0 , :black )
421
- wolf_2 = Wolf (; id = 4 , pos = (2 , 1 ), ground_speed = 2.0 , fur_color = :white )
396
+ hawk_1 = (Animal ∘ Hawk) (1 , (1 , 1 ), 1.0 , 2.0 , 3 )
397
+ hawk_2 = (Animal ∘ Hawk) (; id = 2 , pos = (1 , 2 ), ground_speed = 2.3 , flight_speed = 2 )
398
+ wolf_1 = (Animal ∘ Wolf) (3 , (2 , 2 ), 2.0 , 3.0 , :black )
399
+ wolf_2 = (Animal ∘ Wolf) (; id = 4 , pos = (2 , 1 ), ground_speed = 2.0 , fur_color = :white )
422
400
423
401
@test hawk_1. energy == 1.0
424
402
@test hawk_2. energy == 0.1
@@ -430,31 +408,31 @@ end
430
408
@test wolf_2. fur_color == :white
431
409
@test_throws " " hawk_1. fur_color
432
410
@test_throws " " wolf_1. flight_speed
433
- @test kindof (hawk_1) == kindof (hawk_2) == : Hawk
434
- @test kindof (wolf_1) == kindof (wolf_2) == : Wolf
411
+ @test variant (hawk_1) isa Hawk && variant (hawk_2) isa Hawk
412
+ @test variant (wolf_1) isa Wolf && variant (wolf_2) isa Wolf
435
413
436
414
fake_step! (a) = nothing
437
415
model = StandardABM (Animal, GridSpace ((5 , 5 )); agent_step! = fake_step!)
438
416
439
- add_agent! (Hawk, model, 1.0 , 2.0 , 3 )
440
- add_agent! (Wolf, model, 2.0 , 3.0 , :black )
417
+ add_agent! (Animal ∘ Hawk, model, 1.0 , 2.0 , 3 )
418
+ add_agent! (Animal ∘ Wolf, model, 2.0 , 3.0 , :black )
441
419
@test nagents (model) == 2
442
420
sample! (model, 2 )
443
421
@test nagents (model) == 2
444
422
445
- b1 = B (1 , 2 , 1 , :s )
446
- c1 = C (1 , 1 , :s , Int[])
447
- d1 = D (1 , :s , [1 ], 1.0 )
448
- b2 = B (; id = 1 , b = 1 , c = :s )
449
- c2 = C (; id = 1 , c = :s , d = [1 ,2 ])
450
- d2 = D (; id = 1 , d = [1 ], a = true )
423
+ b1 = (A ∘ B) (1 , 2 , 1 , :s )
424
+ c1 = (A ∘ C) (1 , 1 , :s , Int[])
425
+ d1 = (A ∘ D) (1 , :s , [1 ], 1.0 )
426
+ b2 = (A ∘ B) (; id = 1 , b = 1 , c = :s )
427
+ c2 = (A ∘ C) (; id = 1 , c = :s , d = [1 ,2 ])
428
+ d2 = (A ∘ D) (; id = 1 , d = [1 ], a = true )
451
429
452
430
@test b2. a == 1
453
431
@test c2. b == 2
454
432
@test d2. c == :k
455
- @test kindof (b1) == kindof (b2) == : B
456
- @test kindof (c1) == kindof (c2) == : C
457
- @test kindof (d1) == kindof (d2) == : D
433
+ @test variant (b1) isa B && variant (b2) isa B
434
+ @test variant (c1) isa C && variant (c2) isa C
435
+ @test variant (d1) isa D && variant (d2) isa D
458
436
@test_throws " " b2. d
459
437
@test_throws " " c1. a
460
438
@test_throws " " d1. b
@@ -466,33 +444,25 @@ end
466
444
467
445
model = StandardABM (A; agent_step! = fake_step!)
468
446
469
- add_agent! (B, model, 2 , 1 , :s )
470
- add_agent! (C, model, 1 , :s , Int[])
471
- add_agent! (D, model, :s , [1 ], 1.0 )
447
+ add_agent! (A ∘ B, model, 2 , 1 , :s )
448
+ add_agent! (A ∘ C, model, 1 , :s , Int[])
449
+ add_agent! (A ∘ D, model, :s , [1 ], 1.0 )
472
450
@test nagents (model) == 3
473
451
sample! (model, 2 )
474
452
@test nagents (model) == 2
475
453
476
- f = F (1 , 1 )
477
- g = G (2 , 2 )
454
+ f = (E ∘ F) (1 , 1 )
455
+ g = (E ∘ G) (2 , 2 )
478
456
479
457
@test f. id == 1
480
458
@test g. id == 2
481
459
@test f. x == 1
482
460
@test g. y == 2
483
461
@test_throws " " f. y
484
462
@test_throws " " g. x
485
- @test kindof (f) == : F
486
- @test kindof (g) == : G
463
+ @test variant (f) isa F
464
+ @test variant (g) isa G
487
465
@test E <: AbstractE && E <: AbstractE
488
466
@test f isa E && g isa E
489
-
490
-
491
- civ = Civilian1 (; id = 2 , pos = (2 , 2 ), group = 2 )
492
- gov = Governor1 (; id = 3 , pos = (2 , 2 ), group = 2 , influence = 0.5 )
493
- civ = Civilian2 (; id = 2 , pos = (2 , 2 ), group = 2 )
494
- gov = Governor2 (; id = 3 , pos = (2 , 2 ), group = 2 , influence = 0.5 )
495
-
496
- @test_throws " " Governor1 (; id = 3 , pos = (2 , 2 ), group = 2 , influence = im)
497
- @test_throws " " Governor2 (; id = 3 , pos = (2 , 2 ), group = 2 , influence = im)
498
467
end
468
+
0 commit comments