// REFERENCE: anonymous-classes-lib using System.Console; using Nemerle.Extensions; module Program { Main() : void { IfaceImpl(); Trivial(); Equality(); FieldAccess(); } Fail() : void { WriteLine("Fail"); } IfaceImpl() : void { def b = 10; def _ : IAnonymous = new (a = "qwerwqr", b, "blabla".Replace("b", "1").Length); } Trivial() : void { // local if(new() == new []()) WriteLine("triv_loc_1: OK"); else Fail(); if(new() != new (a = 10)) WriteLine("triv_loc_2: OK"); else Fail(); // external if(new() == Lib.GetEmpty()) WriteLine("triv_ext_1: OK"); else Fail(); if(new(a = 10) != Lib.GetEmpty()) WriteLine("triv_ext_2: OK"); else Fail(); if(Lib.GetEmpty().Equals(Lib.GetEmpty())) WriteLine("triv_ext_3: OK"); else Fail(); } Equality() : void { // local eq 1 def o1 = new (a = 10, b = "qwr"); def o2 = new [a, b] (10, "qwr"); if(o1 == o2) WriteLine("eq_loc_1: OK"); else Fail(); // local eq 2 def t = (10, "qwr"); def o3 = new [x, y](t); if(o1 != (o3 : IAnonymous)) WriteLine("eq_loc_2: OK"); else Fail(); // external eq 1 def e1 : IAnonymous = Lib.GetObject(10, "qwr"); def e2 : IAnonymous = Lib.GetObject2(10, "qwr"); if(e1.Equals(e2)) WriteLine("eq_ext_1: OK"); else Fail(); // external eq 2 if(e1 == o1) WriteLine("eq_ext_2: OK"); else Fail(); // external eq 3 if(e1 != o3) WriteLine("eq_ext_3: OK"); else Fail(); } FieldAccess() : void { // local def o1 = new (a = 10); def o2 = new [a] (10); if(o1.a == o2.a) WriteLine("field_loc_1: OK"); else Fail(); // external check field existance def e1 = Lib.GetObject(10, "qwr"); if(e1.GetFields().Contains("a")) WriteLine("field_ext_1: OK"); else Fail(); // accessing field if(10 == e1["a"] :> int) WriteLine("field_ext_2: OK"); else Fail(); // accessing non-existed field if(!e1.GetFields().Contains("bla") && null == e1["bla"]) WriteLine("field_ext_3: OK"); else Fail(); } } /* BEGIN-OUTPUT triv_loc_1: OK triv_loc_2: OK triv_ext_1: OK triv_ext_2: OK triv_ext_3: OK eq_loc_1: OK eq_loc_2: OK eq_ext_1: OK eq_ext_2: OK eq_ext_3: OK field_loc_1: OK field_ext_1: OK field_ext_2: OK field_ext_3: OK END-OUTPUT */