[asp.net] Optimize memory usage a bit. String hashes are cached in thread-local storage.
[mono.git] / mcs / tests / gtest-repl-01.cs
1 // Compiler options: -r:Mono.CSharp.dll
2
3 using System;
4 using Mono.CSharp;
5
6 public class MyTest {
7         static void Run (string id, string stmt)
8         {
9                 if (!Evaluator.Run (stmt))
10                         Console.WriteLine ("Failed on test {0}", id);
11         }
12
13         static void Evaluate (string id, string expr, object expected)
14         {
15                 try {
16                         object res = Evaluator.Evaluate (expr);
17                         if (res == null && expected == null)
18                                 return;
19
20                         if (!expected.Equals (res)){
21                                 Console.WriteLine ("Failed on test {2} Expecting {0}, got {1}", expected, res, id);
22                                 throw new Exception ();
23                         }
24                 } catch {
25                         Console.WriteLine ("Failed on test {0}", id);
26                         throw;
27                 }
28         }
29         
30         static void Main ()
31         {
32                 Evaluator.Init (new string [0]); //new string [] { "-v", "-v" });
33
34                 Run ("1",      "System.Console.WriteLine (100);");
35                 Run ("Length", "var a = new int [] {1,2,3}; var b = a.Length;");
36                 
37                 Evaluate ("CompareString", "\"foo\" == \"bar\";", false);
38                 Evaluate ("CompareInt", "var a = 1; a+2;", 3);
39                 Evaluate ("Multiply", "2 * 4;", 8);
40
41                 Evaluator.Run ("using System; using System.Linq;");
42                 Run ("LINQ-1", "var a = new int[]{1,2,3};\nfrom x in a select x;");
43                 Run ("LINQ-2", "var a = from f in System.IO.Directory.GetFiles (\"/tmp\") where f == \"passwd\" select f;");
44
45                 Evaluator.ReferenceAssembly (typeof (MyTest).Assembly);
46                 Evaluate ("assembly reference test", "typeof (MyTest) != null;", true);
47
48                 Run ("LINQ-3", "var first_scope = new int [] {1,2,3};");
49                 Run ("LINQ-4", "var second_scope = from x in first_scope select x;");
50
51                 string prefix = "";
52                 string [] res = Evaluator.GetCompletions ("ConsoleK", out prefix);
53                 if (res [0] != "ey" || res [1] != "eyInfo"){
54                         Console.WriteLine (res [0]);
55                         Console.WriteLine (res [1]);
56                         throw new Exception ("Expected two completions ConsoleKey and ConsoleKeyInfo");
57                 }
58
59                 res = Evaluator.GetCompletions ("Converte", out prefix);
60                 if (res [0] != "r"){
61                         throw new Exception ("Expected one completion for Converter");
62                 }
63
64                 res = Evaluator.GetCompletions ("Sys", out prefix);
65                 if (res [0] != "tem"){
66                         throw new Exception ("Expected at least a conversion for System");
67                 }
68
69                 res = Evaluator.GetCompletions ("System.Int3", out prefix);
70                 if (res [0] != "2"){
71                         throw new Exception ("Expected completion to System.Int32");
72                 }
73
74                 res = Evaluator.GetCompletions ("new System.Text.StringBuilder () { Ca", out prefix);
75                 if (res [0] != "pacity"){
76                         throw new Exception ("Expected completion to Capacity");
77                 }
78
79                 res = Evaluator.GetCompletions ("new System.Text.StringBuilder () { ", out prefix);
80                 if (res.Length != 3){
81                         throw new Exception ("Epxected 4 completions (Capacity Chars Length MaxCapacity)");
82                 }
83
84                 // These should return "partial"
85                 object eval_result;
86                 bool result_set;
87                 string sres  = Evaluator.Evaluate ("1+", out eval_result, out result_set);
88                 if (result_set)
89                         throw new Exception ("No result should have been set");
90                 if (sres != "1+")
91                         throw new Exception ("The result should have been the input string, since we have a partial input");
92                 
93         }       
94 }