]> gerrit.simantics Code Review - simantics/python.git/blob - org.simantics.pythonlink/test/org/simantics/pythonlink/test/scripts/Variant.sts
Addition of null value check to getPythonObject()
[simantics/python.git] / org.simantics.pythonlink / test / org / simantics / pythonlink / test / scripts / Variant.sts
1 > import "Python"\r
2 > a = variant ([1.0, 2.0, 3.0])\r
3 > a\r
4 [1.0, 2.0, 3.0] : Double[]\r
5 > variantDatatype a\r
6 Double[]\r
7 > matchDatatype DoubleType = "Double" \r
8 > matchDatatype (ArrayType t) = matchDatatype t + "[]"\r
9 > matchDatatype (variantDatatype a)\r
10 "Double[]" \r
11 > getVariantAsNumber var = match variantDatatype var with\r
12 >    BooleanType -> if variantValue var then 1.0 else 0.0\r
13 >    ByteType -> coerce (coerce (variantValue var :: Byte) :: Integer)\r
14 >    IntegerType -> coerce (variantValue var :: Integer)\r
15 >    LongType -> coerce (variantValue var :: Long)\r
16 >    FloatType -> coerce (variantValue var :: Float)\r
17 >    DoubleType -> variantValue var :: Double\r
18 >    StringType -> coerce (variantValue var :: String)\r
19 >    OptionalType t -> getVariantAsNumber (variantComponent var componentReference)\r
20 >    otherwise -> fail "Variant \(var) is not a number"\r
21 > getVariantAsNumber (variant True)\r
22 1.0\r
23 > getVariantAsNumber (variant (2 :: Byte))\r
24 2.0\r
25 > getVariantAsNumber (variant (456 :: Integer))\r
26 456.0\r
27 > getVariantAsNumber (variant (Just 2.5 :: Maybe Double))\r
28 2.5\r
29 > getVariantAsNumber (variant "23.7")\r
30 23.7\r
31 > b = runPython do\r
32 >     setPythonVariantVariable "foo" a\r
33 >     executePythonStatement "foo.append(4.0)"\r
34 >     getPythonVariantVariable "foo"\r
35 > b\r
36 [1.0 : Double, 2.0 : Double, 3.0 : Double, 4.0 : Double] : Variant[]\r
37 > variantValue b :: [Double]\r
38 [1.0, 2.0, 3.0, 4.0]\r
39 > import "MMap" as MMap\r
40 > runPython do\r
41 >     foo = MMap.create () :: MMap.T String Dynamic\r
42 >     MMap.put foo "c1" (toDynamic (vector [True, True, False, True]))\r
43 >     MMap.put foo "c2" (toDynamic ["foo", "bar", "baz"])\r
44 >     MMap.put foo "c3" (toDynamic 25.0)\r
45 >     setPythonVariantVariable "foo" (variant foo)\r
46 >     executePythonStatement "c1 = foo['c1']"\r
47 >     executePythonStatement "c2 = foo['c2']"\r
48 >     executePythonStatement "c3 = foo['c3']"\r
49 >     (getPythonBooleanArrayVariable "c1", getPythonStringArrayVariable "c2", getPythonDoubleVariable "c3")\r
50 (vector [True, True, False, True], vector ["foo", "bar", "baz"], 25.0)\r