# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

# User-Defined Out-Parameter Test Suite
# Mirrors builtin coverage but routes through the my_floor helper rule
# to ensure planner handling stays correct for user-defined function rules.

cases:
  - note: user_fcn_out_param_simple_binding
    data: {}
    modules:
      - |
        package test

        my_floor(x) := y if {
            floor(x, y)
        }

        rule1 if {
            my_floor(1.001, x)
            x == 1
        }
    query: data.test.rule1
    want_result: true

  - note: user_fcn_out_param_scheduler_reordering
    data: {}
    modules:
      - |
        package test

        my_floor(x) := y if {
            floor(x, y)
        }

        rule2 if {
            x == 1
            my_floor(1.001, x)
        }
    query: data.test.rule2
    want_result: true

  - note: user_fcn_out_param_existing_binding_equality
    data: {}
    modules:
      - |
        package test

        my_floor(x) := y if {
            floor(x, y)
        }

        rule3 if {
            x := 1
            my_floor(1.001, x)
        }
    query: data.test.rule3
    want_result: true

  - note: user_fcn_out_param_existing_binding_mismatch
    data: {}
    modules:
      - |
        package test

        my_floor(x) := y if {
            floor(x, y)
        }

        rule31 if {
            x := 2
            my_floor(1.001, x)
        }
    query: data.test.rule31
    want_result: "#undefined"

  - note: user_fcn_out_param_literal_success
    data: {}
    modules:
      - |
        package test

        my_floor(x) := y if {
            floor(x, y)
        }

        rule4 if {
            my_floor(1.001, 1)
        }
    query: data.test.rule4
    want_result: true

  - note: user_fcn_out_param_literal_failure
    data: {}
    modules:
      - |
        package test

        my_floor(x) := y if {
            floor(x, y)
        }

        rule5 if {
            my_floor(1.001, 2)
        }
    query: data.test.rule5
    want_result: "#undefined"
