1
2TestBus : UnitTest {
3
4	ignore_test_free {
5		var s,busses,numBusses;
6		s = Server.default;
7		s.newAllocators;
8
9		numBusses = s.options.numAudioBusChannels - (s.options.numOutputBusChannels + s.options.numInputBusChannels);
10
11		busses = Array.fill( numBusses,{
12									Bus.audio(s,1);
13							});
14		this.assert(busses.every(_.notNil),"should be able to allocate all busses");
15		this.assertEquals( busses.select(_.notNil).size, numBusses," should be numAudioBusChannels busses");
16
17		busses.do({ |b| b.free });
18
19		busses = Array.fill( numBusses,{
20									Bus.audio(s,1);
21							});
22
23		this.assert(busses.every(_.notNil),"after freeing, should be able to re-allocate all busses");
24		this.assertEquals( busses.select(_.notNil).size, numBusses," should be numAudioBusChannels busses");
25
26	}
27	test_controlFree {
28		var s,busses;
29		s = Server.default;
30		s.newAllocators;
31
32		busses = Array.fill( s.options.numControlBusChannels,{
33									Bus.control(s,1);
34							});
35		this.assertEquals( busses.select(_.notNil).size, s.options.numControlBusChannels," should be numControlBusChannels busses");
36
37		busses.do({ |b| b.free });
38
39		busses = Array.fill( s.options.numControlBusChannels,{
40									Bus.control(s,1);
41							});
42
43		this.assertEquals( busses.select(_.notNil).size, s.options.numControlBusChannels," should be numControlBusChannels busses able to allocate again after freeing all");
44	}
45
46	// note: server reboot does not de-allocate busses
47	// and isn't supposed to
48
49	test_get {
50		var s, bus, set_value, get_value;
51		s = this.s;
52		this.bootServer;
53
54		set_value = 88.88;
55		bus = Bus.control(s);
56		s.sync;
57
58		bus.set(set_value);
59		s.sync;
60
61		get_value = 0;
62		bus.get({ |value|
63			get_value = value;
64		});
65
66		0.2.wait;
67
68		// Some precision is lost when converting to 32-bit float, hence the use of
69		// assertFloatEquals.
70		this.assertFloatEquals(get_value, set_value, "Bus:get works", 0.001);
71
72		bus.free;
73	}
74
75	test_getn {
76		var s, bus, set_values, get_values;
77		s = this.s;
78		this.bootServer;
79
80		set_values = [88.88, 8, 888.8, 8.88];
81		bus = Bus.control(s, set_values.size);
82		s.sync;
83
84		bus.setn(set_values);
85		s.sync;
86
87		get_values = [0, 0];
88		bus.getn(2, { |values|
89			get_values = values;
90		});
91
92		0.2.wait;
93
94		// See comments in test_get.
95		this.assertArrayFloatEquals(get_values, set_values[0..1], "Bus:getn works", 0.001);
96
97		bus.free;
98	}
99
100}
101