---
cases:
  - note: functions/false result negation
    query: data.ex.falsy_negation = x
    modules:
      - |
        package topdown_test_partial

        __result__ := _result if {
        	_result = ["al", "ce"]
        }
      - |
        package ex

        foo(__local46__) := y if {
        	split(__local46__, "i", y)
        }

        bar[x] := y if {
        	data.l[_].a = x
        	data.ex.foo(x, y)
        }

        chain0(__local47__) := y if {
        	data.ex.foo(__local47__, y)
        }

        chain1(__local48__) := b if {
        	data.ex.chain0(__local48__, b)
        }

        chain2 := d if {
        	data.ex.chain1("fooibar", d)
        }

        cross(__local49__) := [a, b] if {
        	split(__local49__, "i", y)
        	__local27__ = y[1]
        	data.ex.foo(__local27__, b)
        	__local28__ = y[2]
        	data.test.foo(__local28__, a)
        }

        falsy_func(__local50__) := false

        falsy_func_else(__local51__) if {
        	__local51__ = 1
        }

        else := false

        falsy_undefined if {
        	data.ex.falsy_func(1)
        }

        falsy_negation if {
        	not data.ex.falsy_func(1)
        }

        falsy_else_value := __local23__ if {
        	true
        	data.ex.falsy_func_else(2, __local23__)
        }

        falsy_else_undefined if {
        	data.ex.falsy_func_else(2)
        }

        falsy_else_negation if {
        	not data.ex.falsy_func_else(2)
        }

        arrays([__local53__, __local54__]) := [a, b] if {
        	data.ex.foo(__local53__, a)
        	data.ex.foo(__local54__, b)
        }

        arraysrule := y if {
        	data.ex.arrays(["hih", "foo"], y)
        }

        objects({"foo": __local55__, "bar": __local56__}) := z if {
        	data.ex.foo(__local55__, a)
        	data.test.foo(__local56__, b)
        	z = [a, b]
        }

        objectsrule := y if {
        	data.ex.objects({"bar": "hi ho", "foo": "hih"}, y)
        }

        refoutput := y if {
        	data.ex.foo("hih", z)
        	y = z[1]
        }

        void(__local57__) if {
        	__local57__ = "foo"
        }

        voidGood if {
        	not data.ex.void("bar", true)
        }

        voidBad if {
        	data.ex.void("bar", true)
        }

        multi(1, __local58__) := y if {
        	y = __local58__
        }

        multi(2, __local59__) := y if {
        	__local24__ = 2 * __local59__
        	a = __local24__
        	__local25__ = a + 1
        	y = __local25__
        }

        multi(3, __local60__) := y if {
        	__local26__ = __local60__ * 10
        	y = __local26__
        }

        multi("foo", __local61__) := y if {
        	y = "bar"
        }

        multi1 := y if {
        	data.ex.multi(1, 2, y)
        }

        multi2 := y if {
        	data.ex.multi(2, 2, y)
        }

        multi3 := y if {
        	data.ex.multi(3, 2, y)
        }

        multi4 := y if {
        	data.ex.multi("foo", 2, y)
        }

        always_true_fn(__local62__) := true

        always_true if {
        	data.ex.always_true_fn(1)
        }
      - |
        package test

        foo(__local66__) := y if {
        	trim(__local66__, "h o", y)
        }

        cross := y if {
        	data.ex.cross("hi, my name is foo", y)
        }

        multi("foo", __local67__) := y if {
        	y = __local67__
        }

        multi("bar", __local68__) := y if {
        	y = "baz"
        }

        multi_cross_pkg := [y, z] if {
        	data.test.multi("foo", "bar", y)
        	data.ex.multi(2, 1, z)
        }
      - |
        package test

        samepkg := y if {
        	data.test.foo("how do you do?", y)
        }
      - |
        package test.l1.l3

        g(__local70__) := __local70__
      - |
        package test.l1.l2

        p := true

        f(__local72__) := __local72__
      - |
        package test.omit_result

        f(__local74__) := __local74__

        p if {
        	data.test.omit_result.f(1)
        }
    data: {}
    want_result:
      - x: true
