UNPKG

2.49 kBPlain TextView Raw
1import { expect } from "chai";
2import { BasicTests } from "../../test/helper/Basic.js";
3import { CompareToFile } from "../../test/helper/CompareToFile.js";
4import { EffectTests } from "../../test/helper/EffectTests.js";
5import { Oscillator } from "../source/oscillator/Oscillator.js";
6import { FeedbackDelay } from "./FeedbackDelay.js";
7import { FeedbackEffect } from "./FeedbackEffect.js";
8
9describe("FeedbackDelay", () => {
10 BasicTests(FeedbackDelay);
11 EffectTests(FeedbackDelay, 0.01);
12
13 it("matches a file", () => {
14 return CompareToFile(
15 () => {
16 const delay = new FeedbackDelay(0.1, 0.6).toDestination();
17 const osc = new Oscillator().connect(delay);
18 osc.type = "square";
19 osc.start(0).stop(0.01);
20 },
21 "feedbackDelay.wav",
22 0.05
23 );
24 });
25
26 context("API", () => {
27 it("extends FeedbackEffect", () => {
28 const feedbackDelay = new FeedbackDelay(0.2, 0.3);
29 expect(feedbackDelay).to.be.instanceOf(FeedbackEffect);
30 feedbackDelay.dispose();
31 });
32
33 it("parses constructor arguments correctly", () => {
34 const feedbackDelay = new FeedbackDelay(0.1, 0.4);
35 expect(feedbackDelay.delayTime.value).to.be.closeTo(0.1, 0.01);
36 expect(feedbackDelay.feedback.value).to.be.closeTo(0.4, 0.01);
37 feedbackDelay.dispose();
38 });
39
40 it("can pass in options in the constructor", () => {
41 const feedbackDelay = new FeedbackDelay({
42 delayTime: 0.2,
43 feedback: 0.3,
44 });
45 expect(feedbackDelay.delayTime.value).to.be.closeTo(0.2, 0.01);
46 expect(feedbackDelay.feedback.value).to.be.closeTo(0.3, 0.01);
47 feedbackDelay.dispose();
48 });
49
50 it("can get/set the options", () => {
51 const feedbackDelay = new FeedbackDelay();
52 feedbackDelay.set({
53 feedback: 0.4,
54 });
55 expect(feedbackDelay.get().feedback).to.be.closeTo(0.4, 0.01);
56 feedbackDelay.dispose();
57 });
58
59 it("can set the delayTime", () => {
60 const feedbackDelay = new FeedbackDelay();
61 feedbackDelay.delayTime.value = "4n";
62 expect(feedbackDelay.delayTime.value).to.be.closeTo(0.5, 0.001);
63 feedbackDelay.delayTime.value = 0.22;
64 expect(feedbackDelay.delayTime.value).to.be.closeTo(0.22, 0.001);
65 feedbackDelay.dispose();
66 });
67
68 it("can set the feedback amount", () => {
69 const feedbackDelay = new FeedbackDelay();
70 feedbackDelay.feedback.value = 1;
71 expect(feedbackDelay.feedback.value).to.be.closeTo(1, 0.001);
72 feedbackDelay.feedback.value = 0.22;
73 expect(feedbackDelay.feedback.value).to.be.closeTo(0.22, 0.001);
74 feedbackDelay.dispose();
75 });
76 });
77});