Skip to content
ValidateMapPolicy

ValidateMapPolicy

Description

Validate whether a given MapPolicy object is valid. Aborts if the policy is structurally invalid.

Parameters

Name Direction Description
policy_value in Policy to validate.

Success

Continue execution, meaning the policy has a non-empty name, all required callbacks, a non-zero max_probe_count, and first_index / next_index return in-range indices across a fixed set of probe-snapshot inputs.

Failure

abort via LOG_FATAL when any of those invariants is broken (NULL pointer, missing name, missing callback, zero max_probe_count, or a callback returning an index past capacity).

Usage example (Cross-references)

Usage examples (Cross-references)
        };
    
        ValidateMapPolicy(custom_policy);
        return custom_next_capacity(6, 5, 0, 7) == 10 && custom_first_index(0x55u, 5) < 5 &&
               custom_next_index(0x55u, 5, 1, 2) < 5;
        };
    
        ValidateMapPolicy(policy);
        return true;
    }
    // name check lets the policy pass cleanly (no later abort).
    static bool test_validate_map_policy_without_name_fails(void) {
        WriteFmt("Testing ValidateMapPolicy without name\n");
    
        MapPolicy policy = valid_baseline_policy();
        policy.name      = "";
    
        ValidateMapPolicy(policy);
        return false;
    }
    // Isolates: missing should_rehash callback.
    static bool test_validate_map_policy_without_should_rehash_fails(void) {
        WriteFmt("Testing ValidateMapPolicy without should_rehash\n");
    
        MapPolicy policy     = valid_baseline_policy();
        policy.should_rehash = NULL;
    
        ValidateMapPolicy(policy);
        return false;
    }
    // Isolates: missing next_capacity callback.
    static bool test_validate_map_policy_without_next_capacity_fails(void) {
        WriteFmt("Testing ValidateMapPolicy without next_capacity\n");
    
        MapPolicy policy     = valid_baseline_policy();
        policy.next_capacity = NULL;
    
        ValidateMapPolicy(policy);
        return false;
    }
    // Isolates: missing first_index callback.
    static bool test_validate_map_policy_without_first_index_fails(void) {
        WriteFmt("Testing ValidateMapPolicy without first_index\n");
    
        MapPolicy policy   = valid_baseline_policy();
        policy.first_index = NULL;
    
        ValidateMapPolicy(policy);
        return false;
    }
    // Isolates: missing next_index callback.
    static bool test_validate_map_policy_without_next_index_fails(void) {
        WriteFmt("Testing ValidateMapPolicy without next_index\n");
    
        MapPolicy policy  = valid_baseline_policy();
        policy.next_index = NULL;
    
        ValidateMapPolicy(policy);
        return false;
    }
    // Isolates: max_probe_count == 0 check.
    static bool test_validate_map_policy_without_probe_limit_fails(void) {
        WriteFmt("Testing ValidateMapPolicy without probe limit\n");
    
        MapPolicy policy       = valid_baseline_policy();
        policy.max_probe_count = 0;
    
        ValidateMapPolicy(policy);
        return false;
    }
    
    static bool test_validate_map_policy_zero_capacity_nonempty_fails(void) {
        WriteFmt("Testing ValidateMapPolicy zero-capacity for non-empty snapshot\n");
    
        MapPolicy policy     = valid_baseline_policy();
        policy.next_capacity = zero_for_first_nonempty_snapshot;
    
        ValidateMapPolicy(policy);
        return false;
    }
    
    static bool test_validate_map_policy_capacity_below_length_fails(void) {
        WriteFmt("Testing ValidateMapPolicy capacity smaller than length\n");
    
        MapPolicy policy     = valid_baseline_policy();
        policy.next_capacity = small_for_same_min;
    
        ValidateMapPolicy(policy);
        return false;
    }
    
    static bool test_validate_map_policy_capacity_below_min_entries_fails(void) {
        WriteFmt("Testing ValidateMapPolicy capacity smaller than min_entries\n");
    
        MapPolicy policy     = valid_baseline_policy();
        policy.next_capacity = small_for_more_min;
    
        ValidateMapPolicy(policy);
        return false;
    }
    
    static bool test_validate_map_policy_first_index_out_of_range_fails(void) {
        WriteFmt("Testing ValidateMapPolicy first_index out of range\n");
    
        MapPolicy policy   = valid_baseline_policy();
        policy.first_index = out_of_range_first_index;
    
        ValidateMapPolicy(policy);
        return false;
    }
    
    static bool test_validate_map_policy_next_index_out_of_range_fails(void) {
        WriteFmt("Testing ValidateMapPolicy next_index out of range\n");
    
        MapPolicy policy  = valid_baseline_policy();
        policy.next_index = out_of_range_next_index;
    
        ValidateMapPolicy(policy);
        return false;
    }
    
    static bool test_validate_map_policy_stuck_probe_fails(void) {
        WriteFmt("Testing ValidateMapPolicy stuck probe sequence\n");
    
        MapPolicy policy  = valid_baseline_policy();
        policy.next_index = stuck_next_index;
    
        ValidateMapPolicy(policy);
        return false;
    }
Last updated on