forked from pythonnet/pythonnet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyinitialize.cs
More file actions
78 lines (72 loc) · 2.58 KB
/
pyinitialize.cs
File metadata and controls
78 lines (72 loc) · 2.58 KB
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
76
77
78
using System;
using NUnit.Framework;
using Python.Runtime;
namespace Python.EmbeddingTest
{
public class PyInitializeTest
{
/// <summary>
/// Tests issue with multiple simple Initialize/Shutdowns.
/// Fixed by #343
/// </summary>
[Test]
public static void StartAndStopTwice()
{
PythonEngine.Initialize();
PythonEngine.Shutdown();
PythonEngine.Initialize();
PythonEngine.Shutdown();
}
[Test]
public static void LoadDefaultArgs()
{
using (new PythonEngine())
using (var argv = new PyList(Runtime.Runtime.PySys_GetObject("argv")))
{
Assert.AreNotEqual(0, argv.Length());
}
}
[Test]
public static void LoadSpecificArgs()
{
var args = new[] { "test1", "test2" };
using (new PythonEngine(args))
using (var argv = new PyList(Runtime.Runtime.PySys_GetObject("argv")))
{
Assert.AreEqual(args[0], argv[0].ToString());
Assert.AreEqual(args[1], argv[1].ToString());
}
}
/// <summary>
/// Failing test demonstrating current issue with OverflowException (#376)
/// and ArgumentException issue after that one is fixed.
/// More complex version of StartAndStopTwice test
/// </summary>
[Test]
[Ignore("GH#376: System.OverflowException : Arithmetic operation resulted in an overflow")]
//[Ignore("System.ArgumentException : Cannot pass a GCHandle across AppDomains")]
public void ReInitialize()
{
var code = "from System import Int32\n";
PythonEngine.Initialize();
using (Py.GIL())
{
// Import any class or struct from .NET
PythonEngine.RunSimpleString(code);
}
PythonEngine.Shutdown();
PythonEngine.Initialize();
using (Py.GIL())
{
// Import a class/struct from .NET
// This class/struct must be imported during the first initialization.
PythonEngine.RunSimpleString(code);
// Create an instance of the class/struct
// System.OverflowException Exception will be raised here.
// If replacing int with Int64, OverflowException will be replaced with AppDomain exception.
PythonEngine.RunSimpleString("Int32(1)");
}
PythonEngine.Shutdown();
}
}
}