It’s a difference in what $ and $$ return. $ returns a single element, $$ returns an array of elements. So, this would work:
<script type="text/javascript">
window.addEvent('domready', function() {
i = $("test").getElements('input');
a = $("test").getElements('a');
alert(i.length); // (expected 3)
alert(a.length); //(expected 0)
});
</script>
Or, something like this would also work (would need some adjustment if it really needs to account for multiple elements

):
<script type="text/javascript">
window.addEvent('domready', function() {
var ic = 0;
var ac = 0;
$$("div[id=test]").each(function(el) {
ic = el.getElements('input');
});
$$("div[id=test]").each(function(el) {
ac = el.getElements('a');
});
alert(ic.length);
alert(ac.length);
});
</script>