mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
96 lines
5.1 KiB
Swift
96 lines
5.1 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift -Xfrontend -disable-implicit-concurrency-module-import -emit-library -o %t/%target-library-name(complex) -emit-module %S/complex.swift -module-link-name complex
|
|
// RUN: %target-jit-run %s -I %t -L %t | %FileCheck %s
|
|
|
|
// RUN: grep -v import %s > %t/main.swift
|
|
// RUN: %target-jit-run %t/main.swift %S/complex.swift | %FileCheck %s
|
|
|
|
// REQUIRES: executable_test
|
|
// REQUIRES: swift_interpreter
|
|
|
|
import complex
|
|
|
|
func printDensity(_ d: Int) {
|
|
if (d > 40) {
|
|
print(" ", terminator: "")
|
|
} else if d > 6 {
|
|
print(".", terminator: "")
|
|
} else if d > 4 {
|
|
print("+", terminator: "")
|
|
} else if d > 2 {
|
|
print("*", terminator: "")
|
|
} else {
|
|
print("#", terminator: "")
|
|
}
|
|
}
|
|
|
|
func getMandelbrotIterations(_ c: Complex, _ maxIterations: Int) -> Int {
|
|
var n = 0
|
|
var z = Complex()
|
|
while (n < maxIterations && z.magnitude() < 4.0) {
|
|
z = z*z + c
|
|
n += 1
|
|
}
|
|
return n
|
|
}
|
|
|
|
func mandelbrot(_ xMin: Double, _ xMax: Double,
|
|
_ yMin: Double, _ yMax: Double,
|
|
_ rows: Int, _ cols: Int) {
|
|
// Set the spacing for the points in the Mandelbrot set.
|
|
var dX = (xMax - xMin) / Double(rows)
|
|
var dY = (yMax - yMin) / Double(cols)
|
|
// Iterate over the points an determine if they are in the
|
|
// Mandelbrot set.
|
|
for row in stride(from: xMin, to: xMax, by: dX) {
|
|
for col in stride(from: yMin, to: yMax, by: dY) {
|
|
var c = Complex(real: col, imag: row)
|
|
printDensity(getMandelbrotIterations(c, 200))
|
|
}
|
|
print("\n", terminator: "")
|
|
}
|
|
}
|
|
|
|
mandelbrot(-1.35, 1.4, -2.0, 1.05, 40, 80)
|
|
|
|
// CHECK: ################################################################################
|
|
// CHECK: ##############################********************##############################
|
|
// CHECK: ########################********************************########################
|
|
// CHECK: ####################***************************+++**********####################
|
|
// CHECK: #################****************************++...+++**********#################
|
|
// CHECK: ##############*****************************++++......+************##############
|
|
// CHECK: ############******************************++++.......+++************############
|
|
// CHECK: ##########******************************+++++.... ...++++************##########
|
|
// CHECK: ########******************************+++++.... ..++++++**********#########
|
|
// CHECK: #######****************************+++++....... .....++++++**********#######
|
|
// CHECK: ######*************************+++++....... . .. ............++*********######
|
|
// CHECK: #####*********************+++++++++... .. . ... ..++*********#####
|
|
// CHECK: ####******************++++++++++++..... ..++**********####
|
|
// CHECK: ###***************++++++++++++++... . ...+++**********###
|
|
// CHECK: ##**************+++................. ....+***********##
|
|
// CHECK: ##***********+++++................. .++***********##
|
|
// CHECK: #**********++++++..... ..... ..++***********##
|
|
// CHECK: #*********++++++...... . ..++************#
|
|
// CHECK: #*******+++++....... ..+++************#
|
|
// CHECK: #++++............ ...+++************#
|
|
// CHECK: #++++............ ...+++************#
|
|
// CHECK: #******+++++........ ..+++************#
|
|
// CHECK: #********++++++..... . ..++************#
|
|
// CHECK: #**********++++++..... .... .++************#
|
|
// CHECK: #************+++++................. ..++***********##
|
|
// CHECK: ##*************++++................. . ..+***********##
|
|
// CHECK: ###***************+.+++++++++++..... ....++**********###
|
|
// CHECK: ###******************+++++++++++++..... ...+++*********####
|
|
// CHECK: ####*********************++++++++++.... .. ..++*********#####
|
|
// CHECK: #####*************************+++++........ . . . .......+*********######
|
|
// CHECK: #######***************************+++.......... .....+++++++*********#######
|
|
// CHECK: ########*****************************++++++.... ...++++++**********########
|
|
// CHECK: ##########*****************************+++++..... ....++++***********##########
|
|
// CHECK: ###########******************************+++++........+++***********############
|
|
// CHECK: #############******************************++++.. ...++***********##############
|
|
// CHECK: ################****************************+++...+++***********################
|
|
// CHECK: ###################***************************+.+++**********###################
|
|
// CHECK: #######################**********************************#######################
|
|
// CHECK: ############################************************############################
|
|
// CHECK: ################################################################################
|