//[Test]
    //public void AreWeGeneratingAsStandardGetHashcodeWithStd()
    //{
    //  compiler.should_inline_hash_for_primitives = false; // use .GetHashCode() on all input
    //  var sut = new SimpleValuesHolder(compiler);
    //  StandardTesting(sut);
    //}

    void StandardTesting(SimpleValuesHolder sut)
    {
      // TODO test alle felterne

      sut.c = 'c';
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      Assert.AreEqual(10, debugStats.statsPrimitive, "fields compiled");


      sut.i = 42433;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.ui = 2983983;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.b = true;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.l = -23832232;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.ul = 399992;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.by = 3;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));
      Console.WriteLine(sut.GetHash(compiler));
    }
 public void NoValues()
 {
   var sut = new SimpleValuesHolder();
   int expected = sut.ExpectedFromCodegen();
   
   Assert.AreEqual(expected, sut.GetHash(compiler));
   Assert.AreEqual(10, debugStats.statsPrimitive, "fields compiled");
   Assert.AreEqual(0, debugStats.StatsEnum);
   Assert.AreEqual(0, debugStats.StatsIcollection);
 }
    public void BoolValue()
    {
      var sut = new SimpleValuesHolder();

      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      
      sut.b = true;
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
    }
 public void AreWeGeneratingAsStandardGetHashcode()
 {
   var sut = new SimpleValuesHolder();
   this.StandardTesting(sut);
 }
    public void Value()
    {
      var sut = new SimpleValuesHolder();

      sut.c = 'c';
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      Assert.AreEqual(10, debugStats.statsPrimitive, "fields compiled");


      sut.i = 42433;
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.ui = 2983983;
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.b = true;
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.l = -23832232;
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.ul = 399992;
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

      sut.by = 3;
      Assert.AreEqual(sut.ExpectedFromCodegen(), sut.GetHash(compiler));
      Assert.AreEqual(sut.StandardHashCode(), sut.GetHash(compiler));

    }
    void AssignValues(SimpleValuesHolder sut)
    {
      sut.c = 'c';
      sut.i = 42433;
      sut.ui = 2983983;
      sut.b = true;
      sut.l = -23832232;
      sut.ul = 399992;
      sut.by = 3;

    }
    public void ValuesTiming()
    {
      Compiler.Logging = false;

      var N = 1000000;
      var sut = new SimpleValuesHolder();
      AssignValues(sut);

      // pre-compile before timing
      var mth = compiler.CreateHashingMethod<SimpleValuesHolder>();
      mth(sut);


      var time = Timer.TimeInMillis(() =>
                                          {
                                            for (int i = 0; i < N; i++)
                                            {
                                              x = mth(sut);
                                            }
                                          });
      Console.WriteLine("call gethashcode()");
      Console.WriteLine(time + "    " + x);

      time = Timer.TimeInMillis(() =>
                                          {
                                            for (int i = 0; i < N; i++)
                                            {
                                              x = sut.StandardHashCode();
                                            }
                                          });
        Console.WriteLine("std");
        Console.WriteLine(time + "    " + x);
      

      //  compiler = new Compiler(new Dictionary<Type, HashingMethod>());
      //  compiler.should_inline_hash_for_primitives = true;
      //  sut = new SimpleValuesHolder(compiler);
      //  // pre-compile before run
      //sut.GetHash(compiler);

      //time = Timer.TimeInMillis(() =>
      //                                {
      //                                  for (int i = 0; i < N; i++)

      //                                  {
      //                                    x = sut.GetHash(compiler);
      //                                  }
      //                                });
      //Console.WriteLine("inline calls");
      //Console.WriteLine(time + "    " + x);
    }