using System.Collections.Generic; namespace Vellum.UnitTests { [Saveable] public partial struct Vector { public double X; public double Y; [NoSave] public double Length; } [Saveable] public readonly partial struct Fixed { public readonly int Count; public string Label { get; } public Fixed(int count, string label) { Count = count; Label = label; } } /// /// Holds another [Saveable] type, private and keyword-named fields, and a parameterless constructor that sets a /// field. /// [Saveable] public sealed partial class Crate { public string Name = "unnamed"; public Vector At; public Crate Inside; public int @event; public int Opened; private int secret = 3; public Crate() { Opened = -1; } public int Secret { get { return secret; } } public void Hide(int value) { secret = value; } } [Saveable] public sealed partial class WithoutParameterlessConstructor { public int Value = 5; public int Other; public WithoutParameterlessConstructor(int other) { Other = other; } } [Saveable] public sealed partial class WithImplicitConstructor { public int Value = 5; } /// /// Loads every field, then adjusts one. /// [Saveable] public sealed partial class Shouting { public string Label = ""; private Shouting(SaveReader reader) : this(reader, default(AutoLoadEveryField)) { Label = Label.ToUpperInvariant(); } public Shouting() { } } /// /// Loads nothing that was saved. /// [Saveable] public sealed partial class Forgetful { public int Count; private Forgetful(SaveReader reader) { Count = 42; } public Forgetful() { } } [Saveable] public abstract partial class Beast { public string Name = ""; } [Saveable] public partial class Hound : Beast { public bool Barks; public Beast Prey; } [Saveable] public sealed partial class Puppy : Hound { public int Weeks; } [Saveable] public sealed partial class Kitten : Beast { public int Lives = 9; } /// /// Has no [Saveable] of its own. /// public sealed partial class Wolfhound : Hound { public int Height; } [Saveable] public interface ICreature { } public interface IFlyer : ICreature { } public sealed partial class Dragon : IFlyer { public string Name = ""; public int Wingspan; } public partial struct Sprite : ICreature { public int Glow; } [Saveable] public sealed partial class Menagerie { public ICreature Star; public ICreature Empty; public List Cages = new List(); } [Saveable] public sealed partial class Folder { public string Name = ""; public Folder Parent; public List Children = new List(); } [Saveable] public sealed partial class Kennel { public Beast Resident; public List Pack = new List(); } [Saveable] public partial class Moody { public int Mood; protected Moody(SaveReader reader) : this(reader, default(AutoLoadEveryField)) { Mood += 100; } public Moody() { } } [Saveable] public sealed partial class Grumpy : Moody { public int Grumbles; } public partial class Outer { [Saveable] public partial struct Inner { public int Value; } } public static partial class StaticOuter { [Saveable] public partial struct Inner { public int Value; } } [Saveable] public sealed partial class Chained { public Chained Next; } [Saveable] public partial struct Duo where A : struct { public A First; public B Second; } [Saveable] public abstract partial class Vessel { public CargoType Cargo; } [Saveable] public sealed partial class Barge : Vessel { public int Draft; } [Saveable] public sealed partial class Freighter : Vessel> { public int Tonnage; } [Saveable] public interface ILabelled { } public partial struct Tag : ILabelled { public ItemType Item; } [Saveable] public sealed partial class Fleet { public Vessel Plain; public Vessel> Loaded; public ILabelled Label; } public partial class Crate { [Saveable] public partial struct Label { public ContentType Content; public int Copies; } public partial class Shelf { [Saveable] public sealed partial class Slot { public ContentType Content; public ShelfType Shelf; public SlotType Held; } } } [Saveable] public sealed partial class Grid { public int Width; public List Cells = new List(); } /// /// Holds one of each collection Vellum saves, some of them holding another saved type. /// [Saveable] public sealed partial class Cargo { public List Route = new List(); public int[] Counts = new int[0]; public Dictionary> Tags = new Dictionary>(); public Dictionary Names = new Dictionary(); public Queue Line = new Queue(); public Stack Pile = new Stack(); public int[,] Grid = new int[0, 0]; public LinkedList Chain = new LinkedList(); public SortedDictionary Tally = new SortedDictionary(); public SortedSet Marks = new SortedSet(); public double[,,,] Cube = new double[0, 0, 0, 0]; } /// /// A hierarchy with a member that isn't built in at every level. /// [Saveable] public abstract partial class Shipment { public Crate Top; public int Weight; } [Saveable] public partial class Pallet : Shipment { public List Crates = new List(); } [Saveable] public sealed partial class Truck : Pallet { public Crate Spare; public string Plate = ""; } /// /// Holds a struct that holds an object, so a failure inside the object passes through the struct's key. /// [Saveable] public sealed partial class Pairing { public Duo Pair; } }