/* structs_gvalue_implicit_comparison.c generated by valac, the Vala compiler
 * generated from structs_gvalue_implicit_comparison.vala, do not modify */

#include <glib-object.h>
#include <glib.h>
#include <stdlib.h>
#include <string.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

#define __vala_GValue_free0(var) ((var == NULL) ? NULL : (var = (_vala_GValue_free (var), NULL)))

VALA_EXTERN void get_value (GValue* v,
                GValue* result);
VALA_EXTERN GValue* get_nullable_value (GValue* v);
static GValue* _g_value_dup (GValue* self);
static void _vala_main (void);
static void _vala_GValue_free (GValue* self);

void
get_value (GValue* v,
           GValue* result)
{
	GValue _tmp0_;
	GValue _tmp1_;
	GValue _tmp2_ = {0};
	g_return_if_fail (v != NULL);
	_tmp0_ = *v;
	_tmp1_ = _tmp0_;
	if (G_IS_VALUE (&_tmp1_)) {
		g_value_init (&_tmp2_, G_VALUE_TYPE (&_tmp1_));
		g_value_copy (&_tmp1_, &_tmp2_);
	} else {
		_tmp2_ = _tmp1_;
	}
	*result = _tmp2_;
	return;
}

static GValue*
_g_value_dup (GValue* self)
{
	return g_boxed_copy (G_TYPE_VALUE, self);
}

static gpointer
__g_value_dup0 (gpointer self)
{
	return self ? _g_value_dup (self) : NULL;
}

GValue*
get_nullable_value (GValue* v)
{
	GValue* _tmp0_;
	GValue* result;
	_tmp0_ = __g_value_dup0 (v);
	result = _tmp0_;
	return result;
}

static void
_vala_GValue_free (GValue* self)
{
	g_boxed_free (G_TYPE_VALUE, self);
}

static void
_vala_main (void)
{
	{
		GValue v = {0};
		GValue _tmp0_ = {0};
		GValue _tmp1_;
		GValue _tmp2_;
		g_value_init (&_tmp0_, G_TYPE_INT);
		v = _tmp0_;
		g_value_set_int (&v, 42);
		_tmp1_ = v;
		if (g_value_get_int (&_tmp1_) == 42) {
		} else {
			g_assert_not_reached ();
		}
		_tmp2_ = v;
		if (42 == g_value_get_int (&_tmp2_)) {
		} else {
			g_assert_not_reached ();
		}
		G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
	}
	{
		GValue* v = NULL;
		GValue _tmp3_ = {0};
		GValue _tmp4_;
		GValue* _tmp5_;
		GValue* _tmp6_;
		g_value_init (&_tmp3_, G_TYPE_INT);
		_tmp4_ = _tmp3_;
		_tmp5_ = __g_value_dup0 (&_tmp4_);
		_tmp6_ = _tmp5_;
		G_IS_VALUE (&_tmp4_) ? (g_value_unset (&_tmp4_), NULL) : NULL;
		v = _tmp6_;
		g_value_set_int (v, 42);
		if (g_value_get_int (v) == 42) {
		} else {
			g_assert_not_reached ();
		}
		if (42 == g_value_get_int (v)) {
		} else {
			g_assert_not_reached ();
		}
		__vala_GValue_free0 (v);
	}
	{
		GValue v = {0};
		GValue _tmp7_ = {0};
		GValue _tmp8_;
		GValue _tmp9_;
		g_value_init (&_tmp7_, G_TYPE_STRING);
		v = _tmp7_;
		g_value_set_string (&v, "foo");
		_tmp8_ = v;
		if (g_strcmp0 (g_value_get_string (&_tmp8_), "foo") == 0) {
		} else {
			g_assert_not_reached ();
		}
		_tmp9_ = v;
		if (g_strcmp0 ("foo", g_value_get_string (&_tmp9_)) == 0) {
		} else {
			g_assert_not_reached ();
		}
		G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
	}
	{
		GValue* v = NULL;
		GValue _tmp10_ = {0};
		GValue _tmp11_;
		GValue* _tmp12_;
		GValue* _tmp13_;
		g_value_init (&_tmp10_, G_TYPE_STRING);
		_tmp11_ = _tmp10_;
		_tmp12_ = __g_value_dup0 (&_tmp11_);
		_tmp13_ = _tmp12_;
		G_IS_VALUE (&_tmp11_) ? (g_value_unset (&_tmp11_), NULL) : NULL;
		v = _tmp13_;
		g_value_set_string (v, "foo");
		if (g_strcmp0 (g_value_get_string (v), "foo") == 0) {
		} else {
			g_assert_not_reached ();
		}
		if (g_strcmp0 ("foo", g_value_get_string (v)) == 0) {
		} else {
			g_assert_not_reached ();
		}
		__vala_GValue_free0 (v);
	}
	{
		GValue v = {0};
		GValue _tmp14_ = {0};
		GValue _tmp15_;
		GValue _tmp16_ = {0};
		GValue _tmp17_;
		gboolean _tmp18_;
		GValue _tmp19_;
		GValue _tmp20_ = {0};
		GValue _tmp21_;
		gboolean _tmp22_;
		g_value_init (&_tmp14_, G_TYPE_INT);
		v = _tmp14_;
		g_value_set_int (&v, 23);
		_tmp15_ = v;
		get_value (&_tmp15_, &_tmp16_);
		_tmp17_ = _tmp16_;
		_tmp18_ = g_value_get_int (&_tmp16_) != 23;
		G_IS_VALUE (&_tmp17_) ? (g_value_unset (&_tmp17_), NULL) : NULL;
		if (_tmp18_) {
			g_assert_not_reached ();
		}
		_tmp19_ = v;
		get_value (&_tmp19_, &_tmp20_);
		_tmp21_ = _tmp20_;
		_tmp22_ = 23 != g_value_get_int (&_tmp20_);
		G_IS_VALUE (&_tmp21_) ? (g_value_unset (&_tmp21_), NULL) : NULL;
		if (_tmp22_) {
			g_assert_not_reached ();
		}
		G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
	}
	{
		GValue* v = NULL;
		GValue _tmp23_ = {0};
		GValue _tmp24_;
		GValue* _tmp25_;
		GValue* _tmp26_;
		GValue* _tmp27_;
		GValue* _tmp28_;
		gboolean _tmp29_;
		GValue* _tmp30_;
		GValue* _tmp31_;
		gboolean _tmp32_;
		g_value_init (&_tmp23_, G_TYPE_INT);
		_tmp24_ = _tmp23_;
		_tmp25_ = __g_value_dup0 (&_tmp24_);
		_tmp26_ = _tmp25_;
		G_IS_VALUE (&_tmp24_) ? (g_value_unset (&_tmp24_), NULL) : NULL;
		v = _tmp26_;
		g_value_set_int (v, 23);
		_tmp27_ = get_nullable_value (v);
		_tmp28_ = _tmp27_;
		_tmp29_ = g_value_get_int (_tmp27_) != 23;
		__vala_GValue_free0 (_tmp28_);
		if (_tmp29_) {
			g_assert_not_reached ();
		}
		_tmp30_ = get_nullable_value (v);
		_tmp31_ = _tmp30_;
		_tmp32_ = 23 != g_value_get_int (_tmp30_);
		__vala_GValue_free0 (_tmp31_);
		if (_tmp32_) {
			g_assert_not_reached ();
		}
		__vala_GValue_free0 (v);
	}
	{
		GValue v = {0};
		GValue _tmp33_ = {0};
		GValue _tmp34_;
		GValue _tmp35_ = {0};
		GValue _tmp36_;
		gboolean _tmp37_;
		GValue _tmp38_;
		GValue _tmp39_ = {0};
		GValue _tmp40_;
		gboolean _tmp41_;
		g_value_init (&_tmp33_, G_TYPE_STRING);
		v = _tmp33_;
		g_value_set_string (&v, "bar");
		_tmp34_ = v;
		get_value (&_tmp34_, &_tmp35_);
		_tmp36_ = _tmp35_;
		_tmp37_ = g_strcmp0 (g_value_get_string (&_tmp35_), "bar") != 0;
		G_IS_VALUE (&_tmp36_) ? (g_value_unset (&_tmp36_), NULL) : NULL;
		if (_tmp37_) {
			g_assert_not_reached ();
		}
		_tmp38_ = v;
		get_value (&_tmp38_, &_tmp39_);
		_tmp40_ = _tmp39_;
		_tmp41_ = g_strcmp0 ("bar", g_value_get_string (&_tmp39_)) != 0;
		G_IS_VALUE (&_tmp40_) ? (g_value_unset (&_tmp40_), NULL) : NULL;
		if (_tmp41_) {
			g_assert_not_reached ();
		}
		G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
	}
	{
		GValue* v = NULL;
		GValue _tmp42_ = {0};
		GValue _tmp43_;
		GValue* _tmp44_;
		GValue* _tmp45_;
		GValue* _tmp46_;
		GValue* _tmp47_;
		gboolean _tmp48_;
		GValue* _tmp49_;
		GValue* _tmp50_;
		gboolean _tmp51_;
		g_value_init (&_tmp42_, G_TYPE_STRING);
		_tmp43_ = _tmp42_;
		_tmp44_ = __g_value_dup0 (&_tmp43_);
		_tmp45_ = _tmp44_;
		G_IS_VALUE (&_tmp43_) ? (g_value_unset (&_tmp43_), NULL) : NULL;
		v = _tmp45_;
		g_value_set_string (v, "bar");
		_tmp46_ = get_nullable_value (v);
		_tmp47_ = _tmp46_;
		_tmp48_ = g_strcmp0 (g_value_get_string (_tmp46_), "bar") != 0;
		__vala_GValue_free0 (_tmp47_);
		if (_tmp48_) {
			g_assert_not_reached ();
		}
		_tmp49_ = get_nullable_value (v);
		_tmp50_ = _tmp49_;
		_tmp51_ = g_strcmp0 ("bar", g_value_get_string (_tmp49_)) != 0;
		__vala_GValue_free0 (_tmp50_);
		if (_tmp51_) {
			g_assert_not_reached ();
		}
		__vala_GValue_free0 (v);
	}
}

int
main (int argc,
      char ** argv)
{
	_vala_main ();
	return 0;
}

