### Question:
seq extends AbstractMaxRubyObject { public void add(Atom[] args) { if (args.length == 0) { err("add needs at least one argument"); return; } for (Atom atom : args) { if (!atom.isFloat() && !atom.isInt()) { err("arguments to add must be numbers"); return; } } for (int i = 0; i < seq.size(); i++) { seq.set(i, seq.get(i).add(args[i % args.length])); } onSeqChange(); outputseq(); } seq(Atom[] args); List<Item> items(); Atom[] getseq(); @SuppressWarnings("all") void seq(Atom[] list); int getindex(); void index(int idx); int getiter(); void iter(int iter); int getstep(); void step(int s); String getchordmode(); void chordmode(String chordmode); void list(Atom[] list); void set(Atom[] list); void anything(String msg, Atom[] args); void text(Atom[] args); void rubyseq(Atom[] input); void ruby(Atom[] input); void append(Atom[] list); void prepend(Atom[] list); void insert(Atom[] args); void insertsort(Atom[] list); void repeat(Atom[] args); void length(Atom[] args); void delete(Atom[] args); void subseq(int left, int right); void deleterange(int left, int right); void deletevalue(Atom[] args); void sort(); void sortrange(int left, int right); void replace(Atom args[]); void replacerange(Atom args[]); void swap(Atom args[]); void reverse(); void reverserange(int idx1, int idx2); void rotate(int n); void rotaterange(int left, int right, int n); void add(Atom[] args); @Deprecated void addrange(Atom[] args); @Deprecated void addrevrange(Atom[] args); void multiply(Atom[] args); @Deprecated void multiplyrange(Atom[] args); @Deprecated void multiplyrevrange(Atom[] args); void invert(Atom[] args); void subtractfrom(Atom... args); void max(); Number getMax(); void min(); Number getMin(); void direction(); void direction(int dir); void advance(int n); void next(); void prev(); void bang(); void output(); void outputseq(); void reset(); void resetindex(); void resetiter(); void resetstep(); void resetcmode(); void resetseq(); boolean equals(Object obj); String toString();  }### Answer:
@Test public void testAdd() { seqStub s = makeSeq(1, 2, 3); s.add(2); assertEquals(makeSeq(3, 4, 5), s); s.add(0); assertEquals(makeSeq(3, 4, 5), s); s.add(-4); assertEquals(makeSeq(-1, 0, 1), s); s.add(2, 1, 2); assertEquals(makeSeq(1, 1, 3), s); s.add(2, 1, 1); assertEquals(makeSeq(3, 2, 4), s); s.add(2.5f); assertEquals(makeFloatSeq(5.5f, 4.5f, 6.5f), s); s.set(new Atom[] { Atom.newAtom(1), Atom.newAtom("a"), Atom.newAtom(2.5), Atom.newAtom("b") }); s.add(2); assertEquals(Atom.newAtom(3), s.seq.get(0).toAtom()); assertEquals(Atom.newAtom("a"), s.seq.get(1).toAtom()); assertEquals(Atom.newAtom(2.5 + 2), s.seq.get(2).toAtom()); assertEquals(Atom.newAtom("b"), s.seq.get(3).toAtom()); }