`timescale 1ns/1ps
`include "uvm_macros.svh"
import uvm_pkg::*;

module resource_probe;
  initial begin
    uvm_resource_pool pool = uvm_resource_pool::get();
    uvm_resource#(int) first, second, selected;
    string scope;
    for (int mode = 0; mode < 4; mode++) begin
      scope = $sformatf("resource_case%0d", mode);
      first = new("value", scope);
      second = new("value", scope);
      first.write(11);
      second.write(22);
      pool.set(first);
      case (mode)
        0: pool.set(second, uvm_resource_types::NAME_OVERRIDE);
        1: pool.set_name_override(second);
        2: pool.set(second, uvm_resource_types::TYPE_OVERRIDE);
        3: pool.set_type_override(second);
      endcase
      selected = uvm_resource_db#(int)::get_by_name(scope, "value");
      $display("REVIEW|mode%0d_name|%0d", mode, selected.read());
      selected = uvm_resource_db#(int)::get_by_type(scope);
      $display("REVIEW|mode%0d_type|%0d", mode, selected.read());
    end
    first = new("before_insertion", "precedence_case");
    first.precedence = 9876;
    $display("REVIEW|constructor_scope_match|%0d", first.match_scope("precedence_case"));
    pool.set(first);
    $display("REVIEW|precedence_after_insert|%0d", first.precedence);
    $display("REVIEW|done|1");
    $finish;
  end
endmodule
