<beginfold id='1'>/*</beginfold id='1'> The below does not represent a functional lock/unlock script.
 * It is intended to test KDE's Syntax Highlighting framework.
 <endfold id='1'>*/</endfold id='1'>

// Pragma comment.
pragma cashscript ^0.9.2;

// Locking Script/Function.
contract TestContract(
	address addressExampple,
	int intExample,
	bool boolExample,
	string stringExample,
	pubkey pubkeyExample,
	sig sigExample,
	datasig datasigExample
) <beginfold id='2'>{</beginfold id='2'>
	// Unlocking Script/Function.
	function testUnlock(
		byte singleByte,
		bytes bytesUnspecifiedLength,
		bytes1 bytes1Length,
		bytes99 bytes99Length
	) <beginfold id='2'>{</beginfold id='2'>
		// General.
		require(singleByte == bytes1Length);

		// Arithmetic.
		int resultAbs = abs(intExample);
		int resultMin = min(intExample, 100);
		int resultMax = max(intExample, 100);
		int resultWithin = within(intExample, 0, 100);

		// Hashing.
		bool resultHash160 = hash160(bytesUnspecifiedLength);
		bool resultHash256 = hash256(bytesUnspecifiedLength);
		bool resultRipeMd160 = ripemd160(bytesUnspecifiedLength);
		bool resultSha1 = sha1(bytesUnspecifiedLength);
		bool resultSha256 = sha256(bytesUnspecifiedLength);

		// Signature checking.
		bool resultChecksig = checkSig(sigExample, pubkeyExample);
		bool resultCheckMultiSig = checkMultiSig([sigExample], [pubkeyExample]);
		bool resultCheckDataSig = checkDataSig(datasigExample, bytesUnspecifiedLength, pubkeyExample);

		// Locking Bytecode.
		bytes p2pkh = new LockingBytecodeP2PKH(bytesUnspecifiedLength);
		bytes p2sh20 = new LockingBytecodeP2SH20(bytesUnspecifiedLength);
		bytes p2sh32 = new LockingBytecodeP2SH32(bytesUnspecifiedLength);
		bytes nullData = new LockingBytecodeNullData(bytesUnspecifiedLength);

		// Keywods.
		bool exampleTrue = true;
		bool exampleFalse = false;

		// Control structures.
		if (exampleTrue) <beginfold id='2'>{</beginfold id='2'>
			require(singleByte == bytes1Length);
		<endfold id='2'>}</endfold id='2'> else if (exampleFalse) <beginfold id='2'>{</beginfold id='2'>
			require(singleByte == bytes1Length);
		<endfold id='2'>}</endfold id='2'> else <beginfold id='2'>{</beginfold id='2'>
			require(singleByte == bytes1Length);
		<endfold id='2'>}</endfold id='2'>

		// Units.
		int exampleSatoshis = 1 satoshis;
		int exampleSats = 1 sats;
		int exampleFinney = 1 finney;
		int exampleBits = 1 bits;
		int exampleBitcoin = 1 bitcoin;
		int exampleSeconds = 1 seconds;
		int exampleMinutes = 1 minutes;
		int exampleHours = 1 hours;
		int exampleDays = 1 days;
		int exampleWeeks = 1 weeks;

		// Misc.
		string exampleString = "This is an example string";
		bytes exampleHex = 0xaabbccddeeff;
	<endfold id='2'>}</endfold id='2'>
<endfold id='2'>}</endfold id='2'>
