Commit 7836d344 authored by shrabbit's avatar shrabbit
Browse files

Add Ref and SliInt playgrounds and update dependencies

parent 9505e50a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -76,7 +76,8 @@ public class PlaygroundLauncher(Action onReload)
    {
        while (true)
        {
            var input = AnsiConsole.Ask<string?>("TV> ");
            AnsiConsole.Write("TV> ");
            var input = Console.ReadLine();
            
            switch (input)
            {
+9 −0
Original line number Diff line number Diff line
namespace TestV.Playgrounds.Ts;

public abstract class CTs00A<TCTs00Arg00> : IPlayground
{
    public string LaunchCmd { get; } = "t-" + typeof(TCTs00Arg00).Name.ToLower();
    public string? Name { get; } = typeof(TCTs00Arg00).Name;
    public virtual string? Description { get; } = typeof(TCTs00Arg00).FullName;
    public abstract Task Run(string[] args);
}
 No newline at end of file
+124 −0
Original line number Diff line number Diff line
using CommunityToolkit.HighPerformance;
using Spectre.Console;

namespace TestV.Playgrounds.Ts;

public class Ref : IPlayground
{
    public string LaunchCmd { get; } = "t-ref";
    public string? Name { get; } = nameof(Ref);
    public string? Description { get; } = null;
    public Task Run(string[] args)
    {
        IT0RefA0[] v1 = [new T0RefA0(), new T0RefA1(), new T0RefA2(), new T0RefA3(), new T0RefA4()];

        foreach (var (_, v2) in v1.Index())
        {
            var v3 = v2.CreateAndChange(out var source, out var target);
            AnsiConsole.MarkupLine($"<{v2.GetType().Name}> {source} -> {target}: <{v3}> {(target == v3 ? "[green]YES[/]" : "[red]NO[/]")}");
        }
        
        return Task.CompletedTask;
    }
    
    public interface IT0RefA0
    {
        ulong CreateAndChange(out ulong source, out ulong target);
    }
    
    public class T0RefA0 : IT0RefA0
    {
        public ulong CreateAndChange(out ulong source,  out ulong target)
        {
            source = 3;
            target = 4;
            var v0 = 3UL;
            Change(v0);
            return v0;
        }

        private void Change(ulong v0)
        {
            v0++;
        }
    }

    public class T0RefA1 : IT0RefA0
    {
        public ulong CreateAndChange(out ulong source, out ulong target)
        {
            unsafe
            {
                source = 3UL;
                target = 4UL;
                var v0 = source;
                Change(&v0);
                return v0;
            }
        }

        private unsafe void Change(ulong* v0)
        {
            (*v0)++;
        }
    }

    public class T0RefA2 : IT0RefA0
    {
        public ulong CreateAndChange(out ulong source, out ulong target)
        {
            source = 3UL;
            target = 4UL;
            var v0 = source;
            Change(ref v0);
            return v0;
        }

        private void Change(ref ulong v0)
        {
            v0++;
        }
    }

    public class T0RefA3 : IT0RefA0
    {
        public ulong CreateAndChange(out ulong source, out ulong target)
        {
            source = 3UL;
            target = 4UL;
            var v0 = new Ic0
            {
                p0 = source
            };
            Change(v0);
            return v0.p0;
        }

        private void Change(Ic0 v0)
        {
            v0.p0++;
        }

        class Ic0
        {
            public ulong p0 { get; set; }
        }
    }

    public class T0RefA4 : IT0RefA0
    {
        public ulong CreateAndChange(out ulong source, out ulong target)
        {
            source = 3UL;
            target = 4UL;
            var v0 = source;
            Change(new Ref<ulong>(ref v0));
            return v0;
        }

        private void Change(Ref<ulong> v0)
        {
            v0.Value++;
        }
    }
}
 No newline at end of file
+38 −0
Original line number Diff line number Diff line
using Spectre.Console;

namespace TestV.Playgrounds.Ts;

public class SliInt : CTs00A<SliInt>
{
    public override Task Run(string[] args)
    {
        var v1 = 181891;
        var v2 = 181891;
        AnsiConsole.WriteLine(v1);
        AnsiConsole.WriteLine(v2);

        unsafe
        {
            ((byte*)&v1)[3]++;
            ((byte*)&v2)[0]++;
        }
        
        AnsiConsole.WriteLine(v1);
        AnsiConsole.WriteLine(v2);
        AnsiConsole.WriteLine();

        int v3 = 0b1111111111111111111111111111111;
        int v4 = 0b1111111111111111111111111111111;
        AnsiConsole.WriteLine($"Before: {v3}");
        unsafe
        {
            ((byte*)&v3)[3] = 0b00000000;
            AnsiConsole.WriteLine($"Clear Low 1b: {v3}");
            
            ((byte*)&v4)[0] = 0b00000000;
            AnsiConsole.WriteLine($"Clear High 1b: {v4}");
        }
        
        return Task.CompletedTask;
    }
}
 No newline at end of file
+3 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ using System.Runtime.Intrinsics.Arm;
using System.Runtime.Intrinsics.X86;
using System.Text;
using TestV.Playgrounds;
using TestV.Playgrounds.Ts;

namespace TestV;

@@ -153,6 +154,8 @@ class Program
                .Add<ImgAudio>()
                .Add<Combine>()
                .Add<MemoryAdd>()
                .Add<Ref>()
                .Add<SliInt>()
                .Add<Exp1>();
            
            play.Startup(args);
Loading