// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package alignment

// ----------------------------------------------------------------------------
// Examples from issue #7335.

func main() {
    z := MyStruct{
        Foo:      "foo",
        Bar:      "bar",
        Name:     "name",
        LongName: "longname",
        Baz:      "baz",
    }
    y := MyStruct{
        Foo:                   "foo",
        Bar:                   "bar",
        NameXX:                "name",
        LongNameXXXXXXXXXXXXX: "longname",
        Baz: "baz",
    }
    z := MyStruct{
        Foo:  "foo",
        Bar:  "bar",
        Name: "name",
        LongNameXXXXXXXXXXXXX: "longname",
        Baz: "baz",
    }
}

// ----------------------------------------------------------------------------
// Examples from issue #10392.

var kcfg = KubeletConfig{
    Address:                        s.Address,
    AllowPrivileged:                s.AllowPrivileged,
    HostNetworkSources:             hostNetworkSources,
    HostnameOverride:               s.HostnameOverride,
    RootDirectory:                  s.RootDirectory,
    ConfigFile:                     s.Config,
    ManifestURL:                    s.ManifestURL,
    FileCheckFrequency:             s.FileCheckFrequency,
    HTTPCheckFrequency:             s.HTTPCheckFrequency,
    PodInfraContainerImage:         s.PodInfraContainerImage,
    SyncFrequency:                  s.SyncFrequency,
    RegistryPullQPS:                s.RegistryPullQPS,
    RegistryBurst:                  s.RegistryBurst,
    MinimumGCAge:                   s.MinimumGCAge,
    MaxPerPodContainerCount:        s.MaxPerPodContainerCount,
    MaxContainerCount:              s.MaxContainerCount,
    ClusterDomain:                  s.ClusterDomain,
    ClusterDNS:                     s.ClusterDNS,
    Runonce:                        s.RunOnce,
    Port:                           s.Port,
    ReadOnlyPort:                   s.ReadOnlyPort,
    CadvisorInterface:              cadvisorInterface,
    EnableServer:                   s.EnableServer,
    EnableDebuggingHandlers:        s.EnableDebuggingHandlers,
    DockerClient:                   dockertools.ConnectToDockerOrDie(s.DockerEndpoint),
    KubeClient:                     client,
    MasterServiceNamespace:         s.MasterServiceNamespace,
    VolumePlugins:                  ProbeVolumePlugins(),
    NetworkPlugins:                 ProbeNetworkPlugins(),
    NetworkPluginName:              s.NetworkPluginName,
    StreamingConnectionIdleTimeout: s.StreamingConnectionIdleTimeout,
    TLSOptions:                     tlsOptions,
    ImageGCPolicy:                  imageGCPolicy,imageGCPolicy,
    Cloud:                          cloud,
    NodeStatusUpdateFrequency: s.NodeStatusUpdateFrequency,
}

var a = A{
    Long:                             1,
    LongLong:                         1,
    LongLongLong:                     1,
    LongLongLongLong:                 1,
    LongLongLongLongLong:             1,
    LongLongLongLongLongLong:         1,
    LongLongLongLongLongLongLong:     1,
    LongLongLongLongLongLongLongLong: 1,
    Short: 1,
    LongLongLongLongLongLongLongLongLong: 3,
}

// ----------------------------------------------------------------------------
// Examples from issue #22852.

var fmtMap = map[string]string{
	"1": "123",
	"12": "123",
	"123": "123",
	"1234": "123",
	"12345": "123",
	"123456": "123",
	"12345678901234567890123456789": "123",
	"abcde": "123",
	"123456789012345678901234567890": "123",
	"1234567": "123",
	"abcdefghijklmnopqrstuvwxyzabcd": "123",
	"abcd": "123",
}

type Fmt struct {
	abcdefghijklmnopqrstuvwx string
	abcdefghijklmnopqrstuvwxy string
	abcdefghijklmnopqrstuvwxyz string
	abcdefghijklmnopqrstuvwxyza string
	abcdefghijklmnopqrstuvwxyzab string
	abcdefghijklmnopqrstuvwxyzabc string
	abcde string
	abcdefghijklmnopqrstuvwxyzabcde string
	abcdefg string
}

func main() {
	_ := Fmt{
		abcdefghijklmnopqrstuvwx: "foo",
		abcdefghijklmnopqrstuvwxyza: "foo",
		abcdefghijklmnopqrstuvwxyzab: "foo",
		abcdefghijklmnopqrstuvwxyzabc: "foo",
		abcde: "foo",
		abcdefghijklmnopqrstuvwxyzabcde: "foo",
		abcdefg: "foo",
		abcdefghijklmnopqrstuvwxy: "foo",
		abcdefghijklmnopqrstuvwxyz: "foo",
	}
}

// ----------------------------------------------------------------------------
// Examples from issue #26352.

var _ = map[int]string{
	1: "",

	12345678901234567890123456789: "",
	12345678901234567890123456789012345678: "",
}

func f() {
	_ = map[int]string{
		1: "",

		12345678901234567: "",
		12345678901234567890123456789012345678901: "",
	}
}

// ----------------------------------------------------------------------------
// Examples from issue #26930.

var _ = S{
	F1: []string{
	},
	F2____: []string{},
}

var _ = S{
	F1: []string{


	},
	F2____: []string{},
}

var _ = S{
	F1____: []string{
	},
	F2: []string{},
}

var _ = S{
	F1____: []string{

	},
	F2: []string{},
}
