+my $rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
+my $diagset = "";
+$errcode = Net::Z3950::ZOOM::record_error($rec, $errmsg, $addinfo, $diagset);
+ok($errcode == 238, "can't fetch CANMARC ($errmsg)");
+
+Net::Z3950::ZOOM::resultset_option_set($rs, preferredRecordSyntax => "usmarc");
+$rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
+my $data1 = Net::Z3950::ZOOM::record_get($rec, "render");
+Net::Z3950::ZOOM::resultset_option_set($rs, elementSetName => "b");
+my $data2 = Net::Z3950::ZOOM::record_get($rec, "render");
+ok($data2 eq $data1, "record doesn't know about RS options");
+# Now re-fetch record from result-set with new option
+$rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
+$data2 = Net::Z3950::ZOOM::record_get($rec, "render");
+ok(length($data2) < length($data1), "re-fetched record is brief, old was full");
+
+Net::Z3950::ZOOM::resultset_option_set($rs, preferredRecordSyntax => "xml");
+$rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
+my $cloned = Net::Z3950::ZOOM::record_clone($rec);
+ok(defined $cloned, "cloned record");
+$data2 = Net::Z3950::ZOOM::record_get($rec, "render");
+ok($data2 =~ /<title>/i, "option for XML syntax is honoured");
+
+# Now we test ZOOM_resultset_record_immediate(), which should only
+# work for records that have already been placed in the cache, and
+# ZOOM_resultset_records() which populates the cache, and
+# ZOOM_resultset_cache_reset(), which presumably empties it.
+#
+$rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 0);
+ok(defined $rec, "prefetched record obtained with _immediate()");
+my $data3 = Net::Z3950::ZOOM::record_get($rec, "render");
+ok($data3 eq $data2, "_immediate record renders as expected");
+$rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 1);
+ok(!defined $rec, "non-prefetched record obtained with _immediate()");
+Net::Z3950::ZOOM::resultset_cache_reset($rs);
+$rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 0);
+ok(!defined $rec, "_immediate(0) fails after cache reset");
+# Fill both cache slots, but with no record array
+my $tmp = Net::Z3950::ZOOM::resultset_records($rs, 0, 2, 0);
+ok(!defined $tmp, "resultset_records() returns undef as expected");
+$rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 0);
+ok(defined $rec, "_immediate(0) ok after resultset_records()");
+# Fetch all records at once using records()
+$tmp = Net::Z3950::ZOOM::resultset_records($rs, 0, 2, 1);
+ok(@$tmp == 2, "resultset_records() returned two records");
+$data3 = Net::Z3950::ZOOM::record_get($tmp->[0], "render");
+ok($data3 eq $data2, "record returned from resultset_records() renders as expected");
+$rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 1);
+ok(defined $rec, "_immediate(1) ok after resultset_records()");
+