1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
namespace JitTest
{
internal class Test
{
private long _op1,_op2;
private bool check(long product, bool overflow)
{
Console.Write("Multiplying {0} and {1}...", _op1, _op2);
try
{
if (checked(_op1 * _op2) != product)
return false;
Console.WriteLine();
return !overflow;
}
catch (OverflowException)
{
Console.WriteLine("overflow.");
return overflow;
}
}
private static int Main()
{
Test app = new Test();
app._op1 = 0x000000007fffffff;
app._op2 = 0x000000007fffffff;
if (!app.check(0x3fffffff00000001, false))
goto fail;
app._op1 = 0x0000000100000000;
app._op2 = 0x000000007fffffff;
if (!app.check(0x7fffffff00000000, false))
goto fail;
app._op1 = 0x0000000100000000;
app._op2 = 0x0000000100000000;
if (!app.check(0x0000000000000000, true))
goto fail;
app._op1 = 0x3fffffffffffffff;
app._op2 = 0x0000000000000002;
if (!app.check(0x7ffffffffffffffe, false))
goto fail;
app._op1 = unchecked((long)0xffffffffffffffff);
app._op2 = unchecked((long)0xfffffffffffffffe);
if (!app.check(2, false))
goto fail;
app._op1 = 0x0000000000100000;
app._op2 = 0x0000001000000000;
if (!app.check(0x0100000000000000, false))
goto fail;
app._op1 = unchecked((long)0xffffffffffffffff);
app._op2 = unchecked((long)0x8000000000000001);
if (!app.check(0x7fffffffffffffff, false))
goto fail;
app._op1 = unchecked((long)0xfffffffffffffffe);
app._op2 = unchecked((long)0x8000000000000001);
if (!app.check(0, true))
goto fail;
app._op1 = 2;
app._op2 = unchecked((long)0x8000000000000001);
if (!app.check(0, true))
goto fail;
Console.WriteLine("Test passed");
return 100;
fail:
Console.WriteLine("Test failed");
return 1;
}
}
}
|