`timescale 1ns/1ps
`include "uvm_macros.svh"
import uvm_pkg::*;
module resource_migration_probe;
initial begin
uvm_resource_pool rp = uvm_resource_pool::get();
uvm_resource#(int) r, selected, other, replacement;
uvm_resource_base winner;
uvm_resource_types::rsrc_q_t candidates;
r = new("limit", "env.agent");
r.write(42);
$display("REVIEW|scope_before_insert|%0d", r.match_scope("env.agent"));
selected = uvm_resource_db#(int)::get_by_name("env.agent", "limit", 0);
$display("REVIEW|absent_before_insert|%0d", selected == null);
`ifdef REVIEW_UVM20
rp.set_scope(r, "env.agent");
rp.set_precedence(r, 2000);
`else
r.set();
r.precedence = 2000;
`endif
selected = uvm_resource_db#(int)::get_by_name("env.agent", "limit");
if (selected == null) `uvm_fatal("RESOURCE", "Missing resource")
if (selected.read() != 42) `uvm_fatal("RESOURCE", "Unexpected value")
$display("REVIEW|named_value|%0d", selected.read());
selected = uvm_resource_db#(int)::get_by_type("env.agent");
if (selected != r) `uvm_fatal("RESOURCE", "Unexpected resource")
$display("REVIEW|typed_identity|%0d", selected == r);
$display("REVIEW|precedence_after_insert|%0d", r.precedence);
// Competing priorities: use the explicit selection described in M05-010.
other = new("limit", "env.agent");
other.write(99);
rp.set(other);
other.precedence = 1000;
candidates = rp.lookup_name("env.agent", "limit", uvm_resource#(int)::get_type());
winner = rp.get_highest_precedence(candidates);
if (winner == null) `uvm_fatal("RESOURCE", "Empty selection")
if (!$cast(selected, winner)) `uvm_fatal("RESOURCE", "Unexpected resource type")
$display("REVIEW|highest_value|%0d", selected.read());
// Equal priorities: a name-only override must leave type order unchanged.
other = new("choice", "override_case");
replacement = new("choice", "override_case");
other.write(11); replacement.write(22);
rp.set(other);
`ifdef REVIEW_UVM20
rp.set_name_override(replacement, "override_case");
`else
replacement.set_override(uvm_resource_types::NAME_OVERRIDE);
`endif
selected = uvm_resource_db#(int)::get_by_name("override_case", "choice");
if (selected == null) `uvm_fatal("RESOURCE", "Missing name override")
$display("REVIEW|name_override_value|%0d", selected.read());
selected = uvm_resource_db#(int)::get_by_type("override_case");
if (selected == null) `uvm_fatal("RESOURCE", "Missing typed resource")
$display("REVIEW|type_order_value|%0d", selected.read());
$display("REVIEW|done|1");
$finish;
end
endmodule