// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import (
	"encoding/json"
	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"
	"github.com/kr/pretty"
	"github.com/kylelemons/godebug/diff"
	"github.com/leanovate/gopter"
	"github.com/leanovate/gopter/gen"
	"github.com/leanovate/gopter/prop"
	"os"
	"reflect"
	"testing"
)

func Test_AzureFirewallApplicationRuleCollection_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallApplicationRuleCollection_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallApplicationRuleCollection_STATUS, AzureFirewallApplicationRuleCollection_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallApplicationRuleCollection_STATUS runs a test to see if a specific instance of AzureFirewallApplicationRuleCollection_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallApplicationRuleCollection_STATUS(subject AzureFirewallApplicationRuleCollection_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallApplicationRuleCollection_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallApplicationRuleCollection_STATUS instances for property testing - lazily instantiated by
// AzureFirewallApplicationRuleCollection_STATUSGenerator()
var azureFirewallApplicationRuleCollection_STATUSGenerator gopter.Gen

// AzureFirewallApplicationRuleCollection_STATUSGenerator returns a generator of AzureFirewallApplicationRuleCollection_STATUS instances for property testing.
func AzureFirewallApplicationRuleCollection_STATUSGenerator() gopter.Gen {
	if azureFirewallApplicationRuleCollection_STATUSGenerator != nil {
		return azureFirewallApplicationRuleCollection_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallApplicationRuleCollection_STATUS(generators)
	azureFirewallApplicationRuleCollection_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallApplicationRuleCollection_STATUS{}), generators)

	return azureFirewallApplicationRuleCollection_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallApplicationRuleCollection_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallApplicationRuleCollection_STATUS(gens map[string]gopter.Gen) {
	gens["Id"] = gen.PtrOf(gen.AlphaString())
}

func Test_AzureFirewallAutoscaleConfiguration_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallAutoscaleConfiguration_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallAutoscaleConfiguration_STATUS, AzureFirewallAutoscaleConfiguration_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallAutoscaleConfiguration_STATUS runs a test to see if a specific instance of AzureFirewallAutoscaleConfiguration_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallAutoscaleConfiguration_STATUS(subject AzureFirewallAutoscaleConfiguration_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallAutoscaleConfiguration_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallAutoscaleConfiguration_STATUS instances for property testing - lazily instantiated by
// AzureFirewallAutoscaleConfiguration_STATUSGenerator()
var azureFirewallAutoscaleConfiguration_STATUSGenerator gopter.Gen

// AzureFirewallAutoscaleConfiguration_STATUSGenerator returns a generator of AzureFirewallAutoscaleConfiguration_STATUS instances for property testing.
func AzureFirewallAutoscaleConfiguration_STATUSGenerator() gopter.Gen {
	if azureFirewallAutoscaleConfiguration_STATUSGenerator != nil {
		return azureFirewallAutoscaleConfiguration_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallAutoscaleConfiguration_STATUS(generators)
	azureFirewallAutoscaleConfiguration_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallAutoscaleConfiguration_STATUS{}), generators)

	return azureFirewallAutoscaleConfiguration_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallAutoscaleConfiguration_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallAutoscaleConfiguration_STATUS(gens map[string]gopter.Gen) {
	gens["MaxCapacity"] = gen.PtrOf(gen.Int())
	gens["MinCapacity"] = gen.PtrOf(gen.Int())
}

func Test_AzureFirewallIPConfiguration_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallIPConfiguration_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallIPConfiguration_STATUS, AzureFirewallIPConfiguration_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallIPConfiguration_STATUS runs a test to see if a specific instance of AzureFirewallIPConfiguration_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallIPConfiguration_STATUS(subject AzureFirewallIPConfiguration_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallIPConfiguration_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallIPConfiguration_STATUS instances for property testing - lazily instantiated by
// AzureFirewallIPConfiguration_STATUSGenerator()
var azureFirewallIPConfiguration_STATUSGenerator gopter.Gen

// AzureFirewallIPConfiguration_STATUSGenerator returns a generator of AzureFirewallIPConfiguration_STATUS instances for property testing.
func AzureFirewallIPConfiguration_STATUSGenerator() gopter.Gen {
	if azureFirewallIPConfiguration_STATUSGenerator != nil {
		return azureFirewallIPConfiguration_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallIPConfiguration_STATUS(generators)
	azureFirewallIPConfiguration_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallIPConfiguration_STATUS{}), generators)

	return azureFirewallIPConfiguration_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallIPConfiguration_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallIPConfiguration_STATUS(gens map[string]gopter.Gen) {
	gens["Id"] = gen.PtrOf(gen.AlphaString())
}

func Test_AzureFirewallIpGroups_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallIpGroups_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallIpGroups_STATUS, AzureFirewallIpGroups_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallIpGroups_STATUS runs a test to see if a specific instance of AzureFirewallIpGroups_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallIpGroups_STATUS(subject AzureFirewallIpGroups_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallIpGroups_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallIpGroups_STATUS instances for property testing - lazily instantiated by
// AzureFirewallIpGroups_STATUSGenerator()
var azureFirewallIpGroups_STATUSGenerator gopter.Gen

// AzureFirewallIpGroups_STATUSGenerator returns a generator of AzureFirewallIpGroups_STATUS instances for property testing.
func AzureFirewallIpGroups_STATUSGenerator() gopter.Gen {
	if azureFirewallIpGroups_STATUSGenerator != nil {
		return azureFirewallIpGroups_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallIpGroups_STATUS(generators)
	azureFirewallIpGroups_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallIpGroups_STATUS{}), generators)

	return azureFirewallIpGroups_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallIpGroups_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallIpGroups_STATUS(gens map[string]gopter.Gen) {
	gens["ChangeNumber"] = gen.PtrOf(gen.AlphaString())
	gens["Id"] = gen.PtrOf(gen.AlphaString())
}

func Test_AzureFirewallNatRuleCollection_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallNatRuleCollection_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallNatRuleCollection_STATUS, AzureFirewallNatRuleCollection_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallNatRuleCollection_STATUS runs a test to see if a specific instance of AzureFirewallNatRuleCollection_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallNatRuleCollection_STATUS(subject AzureFirewallNatRuleCollection_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallNatRuleCollection_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallNatRuleCollection_STATUS instances for property testing - lazily instantiated by
// AzureFirewallNatRuleCollection_STATUSGenerator()
var azureFirewallNatRuleCollection_STATUSGenerator gopter.Gen

// AzureFirewallNatRuleCollection_STATUSGenerator returns a generator of AzureFirewallNatRuleCollection_STATUS instances for property testing.
func AzureFirewallNatRuleCollection_STATUSGenerator() gopter.Gen {
	if azureFirewallNatRuleCollection_STATUSGenerator != nil {
		return azureFirewallNatRuleCollection_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallNatRuleCollection_STATUS(generators)
	azureFirewallNatRuleCollection_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallNatRuleCollection_STATUS{}), generators)

	return azureFirewallNatRuleCollection_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallNatRuleCollection_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallNatRuleCollection_STATUS(gens map[string]gopter.Gen) {
	gens["Id"] = gen.PtrOf(gen.AlphaString())
}

func Test_AzureFirewallNetworkRuleCollection_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallNetworkRuleCollection_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallNetworkRuleCollection_STATUS, AzureFirewallNetworkRuleCollection_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallNetworkRuleCollection_STATUS runs a test to see if a specific instance of AzureFirewallNetworkRuleCollection_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallNetworkRuleCollection_STATUS(subject AzureFirewallNetworkRuleCollection_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallNetworkRuleCollection_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallNetworkRuleCollection_STATUS instances for property testing - lazily instantiated by
// AzureFirewallNetworkRuleCollection_STATUSGenerator()
var azureFirewallNetworkRuleCollection_STATUSGenerator gopter.Gen

// AzureFirewallNetworkRuleCollection_STATUSGenerator returns a generator of AzureFirewallNetworkRuleCollection_STATUS instances for property testing.
func AzureFirewallNetworkRuleCollection_STATUSGenerator() gopter.Gen {
	if azureFirewallNetworkRuleCollection_STATUSGenerator != nil {
		return azureFirewallNetworkRuleCollection_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallNetworkRuleCollection_STATUS(generators)
	azureFirewallNetworkRuleCollection_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallNetworkRuleCollection_STATUS{}), generators)

	return azureFirewallNetworkRuleCollection_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallNetworkRuleCollection_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallNetworkRuleCollection_STATUS(gens map[string]gopter.Gen) {
	gens["Id"] = gen.PtrOf(gen.AlphaString())
}

func Test_AzureFirewallPropertiesFormat_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallPropertiesFormat_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallPropertiesFormat_STATUS, AzureFirewallPropertiesFormat_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallPropertiesFormat_STATUS runs a test to see if a specific instance of AzureFirewallPropertiesFormat_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallPropertiesFormat_STATUS(subject AzureFirewallPropertiesFormat_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallPropertiesFormat_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallPropertiesFormat_STATUS instances for property testing - lazily instantiated by
// AzureFirewallPropertiesFormat_STATUSGenerator()
var azureFirewallPropertiesFormat_STATUSGenerator gopter.Gen

// AzureFirewallPropertiesFormat_STATUSGenerator returns a generator of AzureFirewallPropertiesFormat_STATUS instances for property testing.
// We first initialize azureFirewallPropertiesFormat_STATUSGenerator with a simplified generator based on the
// fields with primitive types then replacing it with a more complex one that also handles complex fields
// to ensure any cycles in the object graph properly terminate.
func AzureFirewallPropertiesFormat_STATUSGenerator() gopter.Gen {
	if azureFirewallPropertiesFormat_STATUSGenerator != nil {
		return azureFirewallPropertiesFormat_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS(generators)
	azureFirewallPropertiesFormat_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallPropertiesFormat_STATUS{}), generators)

	// The above call to gen.Struct() captures the map, so create a new one
	generators = make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS(generators)
	AddRelatedPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS(generators)
	azureFirewallPropertiesFormat_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallPropertiesFormat_STATUS{}), generators)

	return azureFirewallPropertiesFormat_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS(gens map[string]gopter.Gen) {
	gens["AdditionalProperties"] = gen.MapOf(
		gen.AlphaString(),
		gen.AlphaString())
	gens["ProvisioningState"] = gen.PtrOf(gen.OneConstOf(
		ProvisioningState_STATUS_Deleting,
		ProvisioningState_STATUS_Failed,
		ProvisioningState_STATUS_Succeeded,
		ProvisioningState_STATUS_Updating))
	gens["ThreatIntelMode"] = gen.PtrOf(gen.OneConstOf(AzureFirewallThreatIntelMode_STATUS_Alert, AzureFirewallThreatIntelMode_STATUS_Deny, AzureFirewallThreatIntelMode_STATUS_Off))
}

// AddRelatedPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS is a factory method for creating gopter generators
func AddRelatedPropertyGeneratorsForAzureFirewallPropertiesFormat_STATUS(gens map[string]gopter.Gen) {
	gens["ApplicationRuleCollections"] = gen.SliceOf(AzureFirewallApplicationRuleCollection_STATUSGenerator())
	gens["AutoscaleConfiguration"] = gen.PtrOf(AzureFirewallAutoscaleConfiguration_STATUSGenerator())
	gens["FirewallPolicy"] = gen.PtrOf(SubResource_STATUSGenerator())
	gens["HubIPAddresses"] = gen.PtrOf(HubIPAddresses_STATUSGenerator())
	gens["IpConfigurations"] = gen.SliceOf(AzureFirewallIPConfiguration_STATUSGenerator())
	gens["IpGroups"] = gen.SliceOf(AzureFirewallIpGroups_STATUSGenerator())
	gens["ManagementIpConfiguration"] = gen.PtrOf(AzureFirewallIPConfiguration_STATUSGenerator())
	gens["NatRuleCollections"] = gen.SliceOf(AzureFirewallNatRuleCollection_STATUSGenerator())
	gens["NetworkRuleCollections"] = gen.SliceOf(AzureFirewallNetworkRuleCollection_STATUSGenerator())
	gens["Sku"] = gen.PtrOf(AzureFirewallSku_STATUSGenerator())
	gens["VirtualHub"] = gen.PtrOf(SubResource_STATUSGenerator())
}

func Test_AzureFirewallPublicIPAddress_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallPublicIPAddress_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallPublicIPAddress_STATUS, AzureFirewallPublicIPAddress_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallPublicIPAddress_STATUS runs a test to see if a specific instance of AzureFirewallPublicIPAddress_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallPublicIPAddress_STATUS(subject AzureFirewallPublicIPAddress_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallPublicIPAddress_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallPublicIPAddress_STATUS instances for property testing - lazily instantiated by
// AzureFirewallPublicIPAddress_STATUSGenerator()
var azureFirewallPublicIPAddress_STATUSGenerator gopter.Gen

// AzureFirewallPublicIPAddress_STATUSGenerator returns a generator of AzureFirewallPublicIPAddress_STATUS instances for property testing.
func AzureFirewallPublicIPAddress_STATUSGenerator() gopter.Gen {
	if azureFirewallPublicIPAddress_STATUSGenerator != nil {
		return azureFirewallPublicIPAddress_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallPublicIPAddress_STATUS(generators)
	azureFirewallPublicIPAddress_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallPublicIPAddress_STATUS{}), generators)

	return azureFirewallPublicIPAddress_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallPublicIPAddress_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallPublicIPAddress_STATUS(gens map[string]gopter.Gen) {
	gens["Address"] = gen.PtrOf(gen.AlphaString())
}

func Test_AzureFirewallSku_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewallSku_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewallSku_STATUS, AzureFirewallSku_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewallSku_STATUS runs a test to see if a specific instance of AzureFirewallSku_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewallSku_STATUS(subject AzureFirewallSku_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewallSku_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewallSku_STATUS instances for property testing - lazily instantiated by
// AzureFirewallSku_STATUSGenerator()
var azureFirewallSku_STATUSGenerator gopter.Gen

// AzureFirewallSku_STATUSGenerator returns a generator of AzureFirewallSku_STATUS instances for property testing.
func AzureFirewallSku_STATUSGenerator() gopter.Gen {
	if azureFirewallSku_STATUSGenerator != nil {
		return azureFirewallSku_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewallSku_STATUS(generators)
	azureFirewallSku_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewallSku_STATUS{}), generators)

	return azureFirewallSku_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewallSku_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewallSku_STATUS(gens map[string]gopter.Gen) {
	gens["Name"] = gen.PtrOf(gen.OneConstOf(AzureFirewallSku_Name_STATUS_AZFW_Hub, AzureFirewallSku_Name_STATUS_AZFW_VNet))
	gens["Tier"] = gen.PtrOf(gen.OneConstOf(AzureFirewallSku_Tier_STATUS_Basic, AzureFirewallSku_Tier_STATUS_Premium, AzureFirewallSku_Tier_STATUS_Standard))
}

func Test_AzureFirewall_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of AzureFirewall_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForAzureFirewall_STATUS, AzureFirewall_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForAzureFirewall_STATUS runs a test to see if a specific instance of AzureFirewall_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForAzureFirewall_STATUS(subject AzureFirewall_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual AzureFirewall_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of AzureFirewall_STATUS instances for property testing - lazily instantiated by
// AzureFirewall_STATUSGenerator()
var azureFirewall_STATUSGenerator gopter.Gen

// AzureFirewall_STATUSGenerator returns a generator of AzureFirewall_STATUS instances for property testing.
// We first initialize azureFirewall_STATUSGenerator with a simplified generator based on the
// fields with primitive types then replacing it with a more complex one that also handles complex fields
// to ensure any cycles in the object graph properly terminate.
func AzureFirewall_STATUSGenerator() gopter.Gen {
	if azureFirewall_STATUSGenerator != nil {
		return azureFirewall_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewall_STATUS(generators)
	azureFirewall_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewall_STATUS{}), generators)

	// The above call to gen.Struct() captures the map, so create a new one
	generators = make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForAzureFirewall_STATUS(generators)
	AddRelatedPropertyGeneratorsForAzureFirewall_STATUS(generators)
	azureFirewall_STATUSGenerator = gen.Struct(reflect.TypeOf(AzureFirewall_STATUS{}), generators)

	return azureFirewall_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForAzureFirewall_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForAzureFirewall_STATUS(gens map[string]gopter.Gen) {
	gens["Etag"] = gen.PtrOf(gen.AlphaString())
	gens["Id"] = gen.PtrOf(gen.AlphaString())
	gens["Location"] = gen.PtrOf(gen.AlphaString())
	gens["Name"] = gen.PtrOf(gen.AlphaString())
	gens["Tags"] = gen.MapOf(
		gen.AlphaString(),
		gen.AlphaString())
	gens["Type"] = gen.PtrOf(gen.AlphaString())
	gens["Zones"] = gen.SliceOf(gen.AlphaString())
}

// AddRelatedPropertyGeneratorsForAzureFirewall_STATUS is a factory method for creating gopter generators
func AddRelatedPropertyGeneratorsForAzureFirewall_STATUS(gens map[string]gopter.Gen) {
	gens["Properties"] = gen.PtrOf(AzureFirewallPropertiesFormat_STATUSGenerator())
}

func Test_HubIPAddresses_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of HubIPAddresses_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForHubIPAddresses_STATUS, HubIPAddresses_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForHubIPAddresses_STATUS runs a test to see if a specific instance of HubIPAddresses_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForHubIPAddresses_STATUS(subject HubIPAddresses_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual HubIPAddresses_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of HubIPAddresses_STATUS instances for property testing - lazily instantiated by
// HubIPAddresses_STATUSGenerator()
var hubIPAddresses_STATUSGenerator gopter.Gen

// HubIPAddresses_STATUSGenerator returns a generator of HubIPAddresses_STATUS instances for property testing.
// We first initialize hubIPAddresses_STATUSGenerator with a simplified generator based on the
// fields with primitive types then replacing it with a more complex one that also handles complex fields
// to ensure any cycles in the object graph properly terminate.
func HubIPAddresses_STATUSGenerator() gopter.Gen {
	if hubIPAddresses_STATUSGenerator != nil {
		return hubIPAddresses_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForHubIPAddresses_STATUS(generators)
	hubIPAddresses_STATUSGenerator = gen.Struct(reflect.TypeOf(HubIPAddresses_STATUS{}), generators)

	// The above call to gen.Struct() captures the map, so create a new one
	generators = make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForHubIPAddresses_STATUS(generators)
	AddRelatedPropertyGeneratorsForHubIPAddresses_STATUS(generators)
	hubIPAddresses_STATUSGenerator = gen.Struct(reflect.TypeOf(HubIPAddresses_STATUS{}), generators)

	return hubIPAddresses_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForHubIPAddresses_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForHubIPAddresses_STATUS(gens map[string]gopter.Gen) {
	gens["PrivateIPAddress"] = gen.PtrOf(gen.AlphaString())
}

// AddRelatedPropertyGeneratorsForHubIPAddresses_STATUS is a factory method for creating gopter generators
func AddRelatedPropertyGeneratorsForHubIPAddresses_STATUS(gens map[string]gopter.Gen) {
	gens["PublicIPs"] = gen.PtrOf(HubPublicIPAddresses_STATUSGenerator())
}

func Test_HubPublicIPAddresses_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of HubPublicIPAddresses_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForHubPublicIPAddresses_STATUS, HubPublicIPAddresses_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForHubPublicIPAddresses_STATUS runs a test to see if a specific instance of HubPublicIPAddresses_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForHubPublicIPAddresses_STATUS(subject HubPublicIPAddresses_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual HubPublicIPAddresses_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of HubPublicIPAddresses_STATUS instances for property testing - lazily instantiated by
// HubPublicIPAddresses_STATUSGenerator()
var hubPublicIPAddresses_STATUSGenerator gopter.Gen

// HubPublicIPAddresses_STATUSGenerator returns a generator of HubPublicIPAddresses_STATUS instances for property testing.
// We first initialize hubPublicIPAddresses_STATUSGenerator with a simplified generator based on the
// fields with primitive types then replacing it with a more complex one that also handles complex fields
// to ensure any cycles in the object graph properly terminate.
func HubPublicIPAddresses_STATUSGenerator() gopter.Gen {
	if hubPublicIPAddresses_STATUSGenerator != nil {
		return hubPublicIPAddresses_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForHubPublicIPAddresses_STATUS(generators)
	hubPublicIPAddresses_STATUSGenerator = gen.Struct(reflect.TypeOf(HubPublicIPAddresses_STATUS{}), generators)

	// The above call to gen.Struct() captures the map, so create a new one
	generators = make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForHubPublicIPAddresses_STATUS(generators)
	AddRelatedPropertyGeneratorsForHubPublicIPAddresses_STATUS(generators)
	hubPublicIPAddresses_STATUSGenerator = gen.Struct(reflect.TypeOf(HubPublicIPAddresses_STATUS{}), generators)

	return hubPublicIPAddresses_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForHubPublicIPAddresses_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForHubPublicIPAddresses_STATUS(gens map[string]gopter.Gen) {
	gens["Count"] = gen.PtrOf(gen.Int())
}

// AddRelatedPropertyGeneratorsForHubPublicIPAddresses_STATUS is a factory method for creating gopter generators
func AddRelatedPropertyGeneratorsForHubPublicIPAddresses_STATUS(gens map[string]gopter.Gen) {
	gens["Addresses"] = gen.SliceOf(AzureFirewallPublicIPAddress_STATUSGenerator())
}

func Test_SubResource_STATUS_WhenSerializedToJson_DeserializesAsEqual(t *testing.T) {
	t.Parallel()
	parameters := gopter.DefaultTestParameters()
	parameters.MinSuccessfulTests = 80
	parameters.MaxSize = 3
	properties := gopter.NewProperties(parameters)
	properties.Property(
		"Round trip of SubResource_STATUS via JSON returns original",
		prop.ForAll(RunJSONSerializationTestForSubResource_STATUS, SubResource_STATUSGenerator()))
	properties.TestingRun(t, gopter.NewFormatedReporter(true, 240, os.Stdout))
}

// RunJSONSerializationTestForSubResource_STATUS runs a test to see if a specific instance of SubResource_STATUS round trips to JSON and back losslessly
func RunJSONSerializationTestForSubResource_STATUS(subject SubResource_STATUS) string {
	// Serialize to JSON
	bin, err := json.Marshal(subject)
	if err != nil {
		return err.Error()
	}

	// Deserialize back into memory
	var actual SubResource_STATUS
	err = json.Unmarshal(bin, &actual)
	if err != nil {
		return err.Error()
	}

	// Check for outcome
	match := cmp.Equal(subject, actual, cmpopts.EquateEmpty())
	if !match {
		actualFmt := pretty.Sprint(actual)
		subjectFmt := pretty.Sprint(subject)
		result := diff.Diff(subjectFmt, actualFmt)
		return result
	}

	return ""
}

// Generator of SubResource_STATUS instances for property testing - lazily instantiated by SubResource_STATUSGenerator()
var subResource_STATUSGenerator gopter.Gen

// SubResource_STATUSGenerator returns a generator of SubResource_STATUS instances for property testing.
func SubResource_STATUSGenerator() gopter.Gen {
	if subResource_STATUSGenerator != nil {
		return subResource_STATUSGenerator
	}

	generators := make(map[string]gopter.Gen)
	AddIndependentPropertyGeneratorsForSubResource_STATUS(generators)
	subResource_STATUSGenerator = gen.Struct(reflect.TypeOf(SubResource_STATUS{}), generators)

	return subResource_STATUSGenerator
}

// AddIndependentPropertyGeneratorsForSubResource_STATUS is a factory method for creating gopter generators
func AddIndependentPropertyGeneratorsForSubResource_STATUS(gens map[string]gopter.Gen) {
	gens["Id"] = gen.PtrOf(gen.AlphaString())
}
