FUNCTION FC 1 : VOID
TITLE = Check FC 21 with L as data source
VAR_TEMP
	STR	: STRING;
END_VAR
BEGIN
	// Check zero length (L-stack)
	L		P##STR
	LAR1
	L		254
	T		B [AR1, P#0.0]
	L		0
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= #STR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	0


	// Check 1 length (L-stack)
	L		P##STR
	LAR1
	L		254
	T		B [AR1, P#0.0]
	L		1
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= #STR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	1


	// Check full length (L-stack)
	L		P##STR
	LAR1
	L		254
	T		B [AR1, P#0.0]
	L		254
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= #STR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	254


	// Check length bigger than maxlen (L-stack)
	L		P##STR
	LAR1
	L		10
	T		B [AR1, P#0.0]
	L		100
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= #STR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	100
END_FUNCTION


FUNCTION FC 2 : VOID
TITLE = Check FC 21 with DB as data source
BEGIN
	// Check zero length (DB)
	AUF		DB 2
	LAR1		P#DBX 0.0
	L		254
	T		B [AR1, P#0.0]
	L		0
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= DB2.DBSTR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	0


	// Check 1 length (DB)
	AUF		DB 2
	LAR1		P#DBX 0.0
	L		254
	T		B [AR1, P#0.0]
	L		1
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= DB2.DBSTR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	1


	// Check full length (DB)
	AUF		DB 2
	LAR1		P#DBX 0.0
	L		254
	T		B [AR1, P#0.0]
	L		254
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= DB2.DBSTR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	254


	// Check length bigger than maxlen (DB)
	AUF		DB 2
	LAR1		P#DBX 0.0
	L		10
	T		B [AR1, P#0.0]
	L		100
	T		B [AR1, P#1.0]
	LAR1		P#42.0
	LAR2		P#42.1
	AUF		DB 1
	CALL "LEN" (
		S	:= DB2.DBSTR,
		RET_VAL	:= MW 0,
	)
	__ASSERT==	__STW BIE,	1
	__ASSERT==	__AR 1,		P#42.0
	__ASSERT==	__AR 2,		P#42.1
	__ASSERT==	DBNO,		1
	L		MW 0
	__ASSERT==	__ACCU 1,	100
END_FUNCTION


ORGANIZATION_BLOCK OB 1
BEGIN
	CALL	FC 1
	CALL	FC 2

	CALL	SFC 46 // Stop CPU
END_ORGANIZATION_BLOCK


DATA_BLOCK DB 1
STRUCT
	TMP	: INT;
END_STRUCT;
BEGIN	
END_DATA_BLOCK


DATA_BLOCK DB 2
STRUCT
	DBSTR	: STRING;
END_STRUCT;
BEGIN	
END_DATA_BLOCK
