File: PrintStruct.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (110 lines) | stat: -rw-r--r-- 4,103 bytes parent folder | download
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// RUN: %empty-directory(%t)
// RUN: %target-build-swift -c -whole-module-optimization -parse-as-library -emit-module -emit-module-path %t/PrintTestTypes.swiftmodule -o %t/PrintTestTypes.o %S/Inputs/PrintTestTypes.swift
// RUN: %target-build-swift %s -Xlinker %t/PrintTestTypes.o -I %t -L %t -o %t/main
// RUN: %target-codesign %t/main
// RUN: %target-run %t/main
// REQUIRES: executable_test
// REQUIRES: reflection

import StdlibUnittest
import PrintTestTypes


let PrintTests = TestSuite("PrintStruct")

PrintTests.test("Printable") {
  let s0 = [ WithoutDescription(1), WithoutDescription(2), WithoutDescription(3) ]
  expectPrinted(
    "[PrintTestTypes.WithoutDescription(x: 1), PrintTestTypes.WithoutDescription(x: 2), PrintTestTypes.WithoutDescription(x: 3)]",
  s0)
  expectDebugPrinted(
  "[PrintTestTypes.WithoutDescription(x: 1), PrintTestTypes.WithoutDescription(x: 2), PrintTestTypes.WithoutDescription(x: 3)]",
  s0)
  
  expectPrinted("EmptyStructWithoutDescription()",
    EmptyStructWithoutDescription())
  expectDebugPrinted("PrintTestTypes.EmptyStructWithoutDescription()",
    EmptyStructWithoutDescription())
  
  expectPrinted(
    "ValuesWithoutDescription<Double, String, Array<Int>>(t: 1.25, u: \"abc\", v: [1, 2, 3])",
    ValuesWithoutDescription(1.25, "abc", [ 1, 2, 3 ]))
  expectDebugPrinted(
    "PrintTestTypes.ValuesWithoutDescription<Swift.Double, Swift.String, Swift.Array<Swift.Int>>(t: 1.25, u: \"abc\", v: [1, 2, 3])", ValuesWithoutDescription(1.25, "abc", [ 1, 2, 3 ]))
}

PrintTests.test("custom string convertible structs") {
  struct Wrapper : CustomStringConvertible {
    var x: CustomStringConvertible?
    
    var description: String {
      return "Wrapper(\(x.debugDescription))"
    }
  }

  expectPrinted("Wrapper(nil)", Wrapper())
  expectPrinted("Wrapper(Optional(Wrapper(nil)))",
    Wrapper(x: Wrapper()))
  expectPrinted("Wrapper(Optional(Wrapper(Optional(Wrapper(nil)))))",
    Wrapper(x: Wrapper(x: Wrapper())))
}

func test_ThickMetatypePrintingImpl<T>(
  _ thickMetatype: T.Type,
  _ expectedPrint: String,
  _ expectedDebug: String
  ) {
    expectPrinted(expectedPrint, thickMetatype)
    expectPrinted("[\(expectedDebug)]", [thickMetatype])
    expectDebugPrinted(expectedDebug, thickMetatype)
    expectDebugPrinted("[\(expectedDebug)]", [thickMetatype])
}

PrintTests.test("StructPrintable") {
  let s0 = StructPrintable(1)
  let s1: ProtocolUnrelatedToPrinting = StructPrintable(1)
  let s2: CustomStringConvertible = StructPrintable(1)
  let s3: Any = StructPrintable(1)
  
  expectPrinted("►1◀︎", s0)
  expectPrinted("►1◀︎", s1)
  expectPrinted("►1◀︎", s2)
  expectPrinted("►1◀︎", s3)
  
  let structMetatype = StructPrintable.self
  expectPrinted("StructPrintable", structMetatype)
  expectDebugPrinted("PrintTestTypes.StructPrintable", structMetatype)
  expectPrinted("[PrintTestTypes.StructPrintable]", [structMetatype])
  expectDebugPrinted("[PrintTestTypes.StructPrintable]", [structMetatype])
  test_ThickMetatypePrintingImpl(structMetatype, "StructPrintable",
    "PrintTestTypes.StructPrintable")
}

PrintTests.test("LargeStructPrintable") {
  let s0 = LargeStructPrintable(10, 20, 30, 40)
  let s1: ProtocolUnrelatedToPrinting = LargeStructPrintable(10, 20, 30, 40)
  let s2: CustomStringConvertible = LargeStructPrintable(10, 20, 30, 40)
  let s3: Any = LargeStructPrintable(10, 20, 30, 40)

  expectPrinted("<10 20 30 40>", s0)
  expectPrinted("<10 20 30 40>", s1)
  expectPrinted("<10 20 30 40>", s2)
  expectPrinted("<10 20 30 40>", s0)
  expectPrinted("<10 20 30 40>", s3)
}

PrintTests.test("StructVeryPrintable") {
  let s0 = StructVeryPrintable(1)
  let s1: ProtocolUnrelatedToPrinting = StructVeryPrintable(1)
  let s2: CustomStringConvertible = StructVeryPrintable(1)
  let s3: CustomDebugStringConvertible = StructVeryPrintable(1)
  let s4: Any = StructVeryPrintable(1)
  
  expectPrinted("<description: 1>", s0)
  expectPrinted("<description: 1>", s1)
  expectPrinted("<description: 1>", s2)
  expectPrinted("<description: 1>", s3)
  expectPrinted("<description: 1>", s4)
}

runAllTests()