File: performance.ss

package info (click to toggle)
surgescript 0.5.4.4-1.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,876 kB
  • sloc: ansic: 13,674; makefile: 16
file content (81 lines) | stat: -rw-r--r-- 1,683 bytes parent folder | download | duplicates (3)
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
//
// performance.ss
// Performance measurement in SurgeScript
// Copyright 2018 Alexandre Martins <alemartf(at)gmail(dot)com>
//

//
// A functor is an object that behaves like a function.
// SurgeScript has a syntactic sugar that allows an object to be "called" like a function.
// Example: given an object "obj", writing
//     x = obj(param);
// is the same as writing
//     x = obj.call(param);
//

// Main Application
object "Application"
{
    benchmark = spawn("Benchmark");
    fib = spawn("Fibonacci");

    state "main"
    {
        t  = benchmark(fib(1));
        t += benchmark(fib(5));
        t += benchmark(fib(10));
        t += benchmark(fib(25));
        t += benchmark(fib(32));
        Console.print("Total time: " + t + " seconds.");
        Application.exit();
    }
}

// This object measures the performance of functor f
object "Benchmark"
{
    fun call(f)
    {
        Console.write("Computing " + f + " = ");
        start = Time.now;
        result = f();
        elapsed = Time.now - start;
        Console.print(result + " \t\t done in " + elapsed + " seconds.");
        return elapsed;
    }
}

// This functor computes the Fibonacci sequence using an exponential algorithm
object "ExponentialFibonacci"
{
    public n = 1;

    fun call()
    {
        return fib(n);
    }

    fun fib(n)
    {
        if(n > 2)
            return fib(n-1) + fib(n-2);
        else
            return 1;
    }

    fun toString()
    {
        return "ExpFib(" + n + ")";
    }
}

// This object generates a Fibonacci functor
object "Fibonacci"
{
    fun call(n)
    {
        fib = spawn("ExponentialFibonacci");
        fib.n = n;
        return fib;
    }
}