// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');
var hexString = require('hexString');

testHelper('SwitchBytearray', 'src/switch_opcodes.bin', function(r, SwitchBytearray) {
  assert.strictEqual(r.opcodes.length, 4);
  assert.strictEqual(hexString(r.opcodes[0].code), hexString([83]));
  assert.strictEqual(r.opcodes[0].body.value, "foobar");
  assert.strictEqual(hexString(r.opcodes[1].code), hexString([73]));
  assert.strictEqual(r.opcodes[1].body.value, 66);
  assert.strictEqual(hexString(r.opcodes[2].code), hexString([73]));
  assert.strictEqual(r.opcodes[2].body.value, 55);
  assert.strictEqual(hexString(r.opcodes[3].code), hexString([83]));
  assert.strictEqual(r.opcodes[3].body.value, "");
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('IfStruct', 'src/if_struct.bin', function(r, IfStruct) {
  assert.strictEqual(r.op1.opcode, 83);
  assert.strictEqual(r.op1.argStr.str, "foo");
  assert.strictEqual(r.op2.opcode, 84);
  assert.strictEqual(r.op2.argTuple.num1, 66);
  assert.strictEqual(r.op2.argTuple.num2, 67);
  assert.strictEqual(r.op3.opcode, 83);
  assert.strictEqual(r.op3.argStr.str, "bar");
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');
var hexString = require('hexString');

testHelper('DefaultEndianExprIsLe', 'src/endian_expr.bin', function(r, DefaultEndianExprIsLe) {
  assert.strictEqual(hexString(r.docs[0].indicator), hexString([73, 73]));
  assert.strictEqual(r.docs[0].main.someInt, 66);
  assert.strictEqual(r.docs[0].main.someIntBe, 66);
  assert.strictEqual(r.docs[0].main.someIntLe, 66);
  assert.strictEqual(hexString(r.docs[1].indicator), hexString([77, 77]));
  assert.strictEqual(r.docs[1].main.someInt, 66);
  assert.strictEqual(r.docs[1].main.someIntBe, 66);
  assert.strictEqual(r.docs[1].main.someIntLe, 66);
  assert.strictEqual(hexString(r.docs[2].indicator), hexString([88, 88]));
  assert.strictEqual(r.docs[2].main.someInt, 66);
  assert.strictEqual(r.docs[2].main.someIntBe, 66);
  assert.strictEqual(r.docs[2].main.someIntLe, 66);
});
var assert = require('assert');
var testHelper = require('testHelper');

testHelper('EnumInvalid', 'src/term_strz.bin', function(r, EnumInvalid) {
    assert.equal(r.pet1, EnumInvalid.Animal.DOG);
    assert.equal(r.pet2, 0x6f);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('NavParent2', 'src/nav_parent2.bin', function(r, NavParent2) {
  assert.strictEqual(r.ofsTags, 8);
  assert.strictEqual(r.numTags, 2);
  assert.strictEqual(r.tags[0].name, "RAHC");
  assert.strictEqual(r.tags[0].ofs, 32);
  assert.strictEqual(r.tags[0].numItems, 3);
  assert.strictEqual(r.tags[0].tagContent.content, "foo");
  assert.strictEqual(r.tags[1].name, "RAHC");
  assert.strictEqual(r.tags[1].ofs, 35);
  assert.strictEqual(r.tags[1].numItems, 6);
  assert.strictEqual(r.tags[1].tagContent.content, "barbaz");
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('IndexToParamUntil', 'src/index_sizes.bin', function(r, IndexToParamUntil) {
  assert.strictEqual(r.qty, 3);
  assert.strictEqual(r.sizes[0], 1);
  assert.strictEqual(r.sizes[1], 8);
  assert.strictEqual(r.sizes[2], 4);
  assert.strictEqual(r.blocks[0].buf, "A");
  assert.strictEqual(r.blocks[1].buf, "BBBBBBBB");
  assert.strictEqual(r.blocks[2].buf, "CCCC");
});
var assert = require('assert');
var testHelper = require('testHelper');

testHelper('SwitchCast', 'src/switch_opcodes.bin', function(r) {
  assert.equal(r.firstObj.value, 'foobar');
  assert.equal(r.secondVal, 0x42);
  // unable to test "err_cast" here
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('RepeatUntilSized', 'src/repeat_until_process.bin', function(r, RepeatUntilSized) {
  assert.strictEqual(r.records.length, 3);
  assert.strictEqual(r.records[0].marker, 232);
  assert.strictEqual(r.records[0].body, 2863311546);
  assert.strictEqual(r.records[1].marker, 250);
  assert.strictEqual(r.records[1].body, 2863315102);
  assert.strictEqual(r.records[2].marker, 170);
  assert.strictEqual(r.records[2].body, 1431655765);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('EnumOfValueInst', 'src/enum_0.bin', function(r, EnumOfValueInst) {
  assert.strictEqual(r.pet1, EnumOfValueInst.Animal.CAT);
  assert.strictEqual(r.pet2, EnumOfValueInst.Animal.CHICKEN);
  assert.strictEqual(r.pet3, EnumOfValueInst.Animal.DOG);
  assert.strictEqual(r.pet4, EnumOfValueInst.Animal.DOG);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('Expr3', 'src/fixed_struct.bin', function(r, Expr3) {
  assert.strictEqual(r.one, 80);
  assert.strictEqual(r.two, "ACK");
  assert.strictEqual(r.three, "@ACK");
  assert.strictEqual(r.four, "_ACK_");
  assert.strictEqual(r.isStrEq, true);
  assert.strictEqual(r.isStrNe, false);
  assert.strictEqual(r.isStrLt, true);
  assert.strictEqual(r.isStrGt, false);
  assert.strictEqual(r.isStrLe, true);
  assert.strictEqual(r.isStrGe, false);
  assert.strictEqual(r.isStrLt2, true);
  assert.strictEqual(r.testNot, true);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('Enum1', 'src/enum_0.bin', function(r, Enum1) {
  assert.strictEqual(r.main.submain.pet1, Enum1.MainObj.Animal.CAT);
  assert.strictEqual(r.main.submain.pet2, Enum1.MainObj.Animal.CHICKEN);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('JsSignedRightShift', 'src/fixed_struct.bin', function(r, JsSignedRightShift) {
  assert.strictEqual(r.shouldBe40000000, 1073741824);
  assert.strictEqual(r.shouldBeA00000, 10485760);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');
var hexString = require('hexString');

testHelper('ExprBytesCmp', 'src/fixed_struct.bin', function(r, ExprBytesCmp) {
  assert.strictEqual(hexString(r.one), hexString([80]));
  assert.strictEqual(hexString(r.two), hexString([65, 67, 75]));
  assert.strictEqual(r.isEq, true);
  assert.strictEqual(r.isNe, false);
  assert.strictEqual(r.isLt, true);
  assert.strictEqual(r.isGt, false);
  assert.strictEqual(r.isLe, true);
  assert.strictEqual(r.isGe, false);
  assert.strictEqual(r.isLt2, false);
  assert.strictEqual(r.isGt2, true);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('ProcessCoerceUsertype2', 'src/process_coerce_bytes.bin', function(r, ProcessCoerceUsertype2) {
  assert.strictEqual(r.records[0].flag, 0);
  assert.strictEqual(r.records[0].buf.value, 1094795585);
  assert.strictEqual(r.records[1].flag, 1);
  assert.strictEqual(r.records[1].buf.value, 1111638594);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('PositionInSeq', 'src/position_in_seq.bin', function(r, PositionInSeq) {
  assert.deepStrictEqual(r.numbers, [(0 + 1), 2, 3]);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('ExprSizeofType1', 'src/fixed_struct.bin', function(r, ExprSizeofType1) {
  assert.strictEqual(r.sizeofBlock, (((1 + 4) + 2) + 4));
  assert.strictEqual(r.sizeofSubblock, 4);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');
var hexString = require('hexString');

testHelper('NavParentFalse', 'src/nav_parent_codes.bin', function(r, NavParentFalse) {
  assert.strictEqual(r.childSize, 3);
  assert.strictEqual(r.elementA.foo.code, 73);
  assert.strictEqual(hexString(r.elementA.foo.more), hexString([49, 50, 51]));
  assert.strictEqual(r.elementA.bar.foo.code, 66);
  assert.strictEqual(r.elementB.foo.code, 98);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('ExprEnum', 'src/term_strz.bin', function(r, ExprEnum) {
  assert.strictEqual(r.constDog, ExprEnum.Animal.DOG);
  assert.strictEqual(r.derivedBoom, ExprEnum.Animal.BOOM);
  assert.strictEqual(r.derivedDog, ExprEnum.Animal.DOG);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('TermStrz', 'src/term_strz.bin', function(r, TermStrz) {
  assert.strictEqual(r.s1, "foo");
  assert.strictEqual(r.s2, "bar");
  assert.strictEqual(r.s3, "|baz@");
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('NavParentSwitch', 'src/nav_parent_switch.bin', function(r, NavParentSwitch) {
  assert.strictEqual(r.category, 1);
  assert.strictEqual(r.content.foo, 66);
  assert.strictEqual(r.content.subelement.bar, 255);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('ExprMod', 'src/fixed_struct.bin', function(r, ExprMod) {
  assert.strictEqual(r.intU, 1262698832);
  assert.strictEqual(r.intS, -52947);
  assert.strictEqual(r.modPosConst, 9);
  assert.strictEqual(r.modNegConst, 4);
  assert.strictEqual(r.modPosSeq, 5);
  assert.strictEqual(r.modNegSeq, 2);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('EnumIf', 'src/if_struct.bin', function(r, EnumIf) {
  assert.strictEqual(r.op1.opcode, EnumIf.Opcodes.A_STRING);
  assert.strictEqual(r.op1.argStr.str, "foo");
  assert.strictEqual(r.op2.opcode, EnumIf.Opcodes.A_TUPLE);
  assert.strictEqual(r.op2.argTuple.num1, 66);
  assert.strictEqual(r.op2.argTuple.num2, 67);
  assert.strictEqual(r.op3.opcode, EnumIf.Opcodes.A_STRING);
  assert.strictEqual(r.op3.argStr.str, "bar");
});
var assert = require('assert');
var testHelper = require('testHelper');

testHelper('SwitchMultiBoolOps', 'src/switch_integers.bin', function(r) {
  assert.equal(r.opcodes.length, 4);

  assert.equal(r.opcodes[0].code, 1);
  assert.equal(r.opcodes[0].body, 7);

  assert.equal(r.opcodes[1].code, 2);
  assert.equal(r.opcodes[1].body, 0x4040);

  assert.equal(r.opcodes[2].code, 4);
  assert.equal(r.opcodes[2].body, 4919);

  assert.equal(r.opcodes[3].code, 8);
  assert.equal(r.opcodes[3].body, 4919);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('NavParent', 'src/nav.bin', function(r, NavParent) {
  assert.strictEqual(r.header.qtyEntries, 2);
  assert.strictEqual(r.header.filenameLen, 8);
  assert.strictEqual(r.index.entries.length, 2);
  assert.strictEqual(r.index.entries[0].filename, "FIRST___");
  assert.strictEqual(r.index.entries[1].filename, "SECOND__");
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('EnumToI', 'src/enum_0.bin', function(r, EnumToI) {
  assert.strictEqual(r.pet1, EnumToI.Animal.CAT);
  assert.strictEqual(r.pet2, EnumToI.Animal.CHICKEN);
  assert.strictEqual(r.pet1I, 7);
  assert.strictEqual(r.oneLtTwo, true);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');
var hexString = require('hexString');

testHelper('ProcessCustom', 'src/process_rotate.bin', function(r, ProcessCustom) {
  assert.strictEqual(hexString(r.buf1), hexString([16, 179, 148, 148, 244]));
  assert.strictEqual(hexString(r.buf2), hexString([95, 186, 123, 147, 99, 35, 95]));
  assert.strictEqual(hexString(r.buf3), hexString([41, 51, 177, 56, 177]));
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('BufferedStruct', 'src/buffered_struct.bin', function(r, BufferedStruct) {
  assert.strictEqual(r.len1, 16);
  assert.strictEqual(r.block1.number1, 66);
  assert.strictEqual(r.block1.number2, 67);
  assert.strictEqual(r.len2, 8);
  assert.strictEqual(r.block2.number1, 68);
  assert.strictEqual(r.block2.number2, 69);
  assert.strictEqual(r.finisher, 238);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('NestedTypes', 'src/fixed_struct.bin', function(r, NestedTypes) {
  assert.strictEqual(r.one.typedAtRoot.valueB, 80);
  assert.strictEqual(r.one.typedHere.valueC, 65);
  assert.strictEqual(r.two.valueB, 67);
});
var assert = require('assert');
var testHelper = require('testHelper');

testHelper('ExprIoEof', 'src/fixed_struct.bin', function(r) {
  assert.equal(r.substream1.one, 1262698832);
  assert.strictEqual(r.substream1.two, undefined);

  assert.equal(r.substream2.one, 4294914349);
  assert.equal(r.substream2.two, 1262698832);
});
// Autogenerated from KST: please remove this line if doing any edits by hand!

var assert = require('assert');
var testHelper = require('testHelper');

testHelper('NonStandard', 'src/fixed_struct.bin', function(r, NonStandard) {
  assert.strictEqual(r.foo, 80);
});